Php DateTime::createFromFormat()带有尾随时区
我正面临一些奇怪的问题 我有一个输入日期 2014年5月9日星期五11:00:00 GMT 0200 现在,当我对其应用DateTime::createFromFormat()时,它似乎不起作用 这就是我所做的Php DateTime::createFromFormat()带有尾随时区,php,date,datetime,Php,Date,Datetime,我正面临一些奇怪的问题 我有一个输入日期 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"); 上述代码运行良好 现在的问题
$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因不同的输入值而变化,这些输入值通常来自提要。也找不到解决办法
在手册中,它支持在末尾添加+,*但这会导致错误
所以
我正在做的工作是删除最后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
)
我检查了这些帖子
并且没有帮助。如果您不使用*
,它将按需要工作。Thsi仅适用于大于等于5.3.9的PHP版本。它仍然会生成一个警告(天知道为什么,因为您显式地允许跟踪数据),但它不会导致解析例程彻底失败,至少它只是一个内部警告,而不是实际的PHP警告
导致*
失败的原因是它允许(强调我的):
随机字节,直到下一个分隔符或数字
由于您的尾随数据都是数字,
*
解析立即返回,而不使用任何字符,将字符串指针保留在末尾仍有尾随字节的位置。啊,我看到我的服务器在PHP5.3上运行,也许当我尝试+时,它也没有为转换的日期生成任何内容。刚在另一台机器上试过,似乎有效,但警告仍然存在。感谢你的回答,我几乎发疯了,甚至没有意识到在PHP5.3上是不工作的,在5.3.9上是隐藏警告。我会接受答案。您是否介意指定版本差异可能会导致您的答案出现此问题,以便其他人不必像我一样敲打头部:)是的,现在我再次阅读3v4l输出,直到5.3.9,这看起来都是错误。我会更新这个答案-你真的应该升级你的服务器,5.3现在是EOL;-)是的,我现在正在升级,看起来debian中的发行包是最新的一个,所以升级PHP。不知道老版本的PHP在debian上到底做得怎么样。无论如何,再次非常感谢。
DateTime Object
(
[date] => 0200-05-15 11:00:00
[timezone_type] => 2
[timezone] => GMT
)