我正面临着日期::createFromFormat()的一些奇怪的问题
我有一个输入日期
星期五2014年5月9日11:00格林尼治时间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
)
我查过这些职位
也没帮上忙。
发布于 2014-05-09 04:46:19
如果您使用+
而不是*
,它将按需要工作。它只适用于PHP版本的>=5.3.9。它仍然生成警告(主知道为什么,因为您显式地允许跟踪数据),但是它不会导致解析例程彻底失败,至少它只是一个内部警告,而不是一个实际的PHP警告。
导致*
失败的原因是它允许(强调我的):
随机字节,直到下一个分隔符或数字
由于尾随数据都是位数,所以*
解析将立即返回,而不会消耗任何字符,因此字符串指针仍处于末尾仍有尾随字节的位置。
https://stackoverflow.com/questions/23563080
复制