我在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正在针对通常来自Feed的不同输入值进行更改。并且无法找到解决这个问题的方法。
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类来处理它?</ p>
$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
)
我查了这些帖子
Convert date string to UTC time with PHP
php datetime createformat parse
并没有帮助。
答案 0 :(得分:2)
如果您use +
而不是*
,它将按预期工作。 Thsi仅适用于PHP版本&gt; = 5.3.9。它仍会生成一个警告(领主知道为什么,因为你明确允许尾随数据)但它并没有导致解析例程完全失败,至少它只是一个内部警告而不是一个真正的PHP警告。
导致*
失败的原因是它允许(强调我的):
直到下一个分隔符或数字
的随机字节
由于您的尾随数据是全部数字,*
解析会立即返回而不会消耗任何字符,而是将字符串指针保留在末尾仍有尾随字节的位置。