DateTime::createFromFormat()尾随时区



我面临一些奇怪的问题与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警告。

导致*失败的原因是它允许(强调我的):

随机字节,直到下一个分隔符或数字

由于您的尾随数据都是数字,因此*解析立即返回而不使用任何字符,将字符串指针留在末尾仍然有尾随字节的位置。

相关内容

  • 没有找到相关文章

最新更新