gpt4 book ai didi

php - 使用带有可选微秒的时区解析 postgres 日期时间

转载 作者:行者123 更新时间:2023-11-29 13:15:53 25 4
gpt4 key购买 nike

我想通过 DateTime::createFromFormat() 解析带时区的 postgres 日期时间。但是我不知道,如何组成$format参数。

$dates = [
'2016-03-04 10:29:40+01',
'2016-03-04 10:29:40.123456+01',
];

$format = 'Y-m-d H:i:s.uP';

foreach ($dates as $value) {
$dt = DateTime::createFromFormat($format, $value);
var_dump($dt);
}
bool(false)

object(DateTime)#2 (3) {
["date"]=>
string(26) "2016-03-04 10:29:40.123456"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+01:00"
}

第一个日期未被解析,第二个是。

最佳答案

编辑

由于您只需要 DateTime::createFromFormat() 解决方案,您将面临一个问题:createFromFormat() 不支持可选部分。没有办法直接解析可能有微秒的字符串。

您可以做的一个技巧是搜索用于 ms 部分的 .,然后即时更改您的模式:

<?
$dates = [
'2016-03-04 10:29:40+01',
'2016-03-04 10:29:40.123456+01',
];

foreach ($dates as $value) {
$format = (strpos($value,'.')===FALSE) ?'Y-m-d H:i:sP':'Y-m-d H:i:s.uP';
$dt = DateTime::createFromFormat($format, $value);
var_dump($dt);
}

如果您不能使用 PHP::strtotime() 格式化输出,Postgresql::to_char() 可能是最好的解决方案

<?
echo date('Y-m-d H:i:s.uP', strtotime('2016-03-04 10:29:40+01'));
// 2016-03-04 01:29:40.000000-08:00

echo date('Y-m-d H:i:s.uP', strtotime('2016-03-04 10:29:40.123456+01'));
// 2016-03-04 01:29:40.000000-08:00

关于php - 使用带有可选微秒的时区解析 postgres 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com