我面临一些奇怪的问题与DateTime::createFromFormat()
我有一个输入日期
2014年5月9日星期五11:00:00 GMT 0200
现在,当我应用DateTime::createFromFormat()上它似乎不工作。
这里我所做的
$d = DateTime::createFromFormat('D M m Y H:i:s T 0200', 'Fri May 09 2014 11:00:00 GMT 0200');
echo $d->format("Y-m-d H:i:s");
以上代码运行良好。
现在的问题是,我看到值0200对于通常来自提要的不同输入值正在变化。我找不到一个方法来处理这个问题。
http://php.net/manual/en/datetime.createfromformat.php在手册中,它支持在末尾添加+,*,但这会产生错误
$d = DateTime::createFromFormat('D M m Y H:i:s T *', 'Fri May 09 2014 11:00:00 GMT 0200');
Array
(
[warning_count] => 0
[warnings] => Array ( )
[error_count] => 1
[errors] => Array (
[30] => Trailing data
)
)
我正在做的工作是通过删除最后4位数字,然后使用格式
$d = DateTime::createFromFormat('D M m Y H:i:s T', 'Fri May 09 2014 11:00:00 GMT');
但问题是,如果有一个适当的方法来处理这一点,即不必替换最后4位数字,并使用输入,因为它是和使用DateTime类来处理它?
$d = new DateTime('Fri May 09 2014 11:00:00 GMT 0200');
也产生输出
DateTime Object
(
[date] => 0200-05-15 11:00:00
[timezone_type] => 2
[timezone] => GMT
)
我检查了这些帖子
使用PHP将日期字符串转换为UTC时间
php datetime createformat parse
如果您使用+
而不是*
,它将按预期工作。这只适用于PHP版本>=5.3.9。它仍然会生成一个警告(天知道为什么,因为你显式地允许尾随数据),但它不会导致解析例程彻底失败,至少它只是一个内部警告,而不是一个实际的PHP警告。
导致*
失败的原因是它允许(强调我的):
随机字节,直到下一个分隔符或数字
由于您的尾随数据都是数字,因此*
解析立即返回而不使用任何字符,将字符串指针留在末尾仍然有尾随字节的位置。