2013-10-04 121 views
0

我试图解析以下字符串:PHP的日期时间createformat解析

Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time) 

但我在努力寻找相应的格式,我想:

$date= DateTime::createFromFormat('D M d Y H:i:s eO (*)','Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)'); 
    echo $date->format('Y-m-d'); 

导致错误。问题是GMT + 0200和括号之间没有空格。下面的作品很好

$date= DateTime::createFromFormat('D M d Y H:i:s e O','Thu Oct 03 2013 07:03:41 GMT +0200'); 
echo $date->format('Y-m-d'); 

但是(显然)我应该能够解析第一个例子。那么你有什么建议如何正确的格式应该是什么样子?

错误,我得到:$ date的

Fatal error: Call to a member function format() on a non-object in C:\.... 

的var_dump调用$日期 - >格式之前:

boolean false 
+0

它给了什么错误 – Fredd

+0

你看到的错误是什么?另外,你错过了一个撇号 - > e O',[这里?]周四<--- –

+0

对不起,ctrl + c ctrl + v错字。我还编辑了错误 – user1762087

回答

1

的问题是格式字符串,这应该是

D M d Y H:i:s e+ 

我已经取代eOe因为输入包含GMT+0200,这确实有“GMT”和偏移之间的隔板。我还用+取代了+部分,这是唯一可以消耗可变输入量的说明符(*匹配一个令牌,即一个单词 - 如果解析失败后有更多输入)。

请注意,由于使用+(使用DateTime::getLastErrors来查看它),仍然会有警告,但转换会正常工作。

+0

爱你并且谢谢 – user1762087

+0

你可以链接到使用'+'的文档吗?我可能错过了一些东西,但找不到任何atm。 – vascowhite

+0

@vascowhite:http://php.net/manual/en/datetime.createfromformat.php,表格底部。 – Jon

1

你可以拆分输入字符串。这里是剥皮这个特别的猫的一种方法: -

$dateString = 'Thu Oct 03 2013 07:03:41 GMT+0200(Central Europe Standard Time)'; 
\DateTime::createFromFormat('D M d Y H:i:s O', explode('(', $dateString)[0]); 

更多的帮助,请参见http://php.net/date

See it working

+0

是的,我在想大致相同的事情,但试图避免该解决方案:-) – user1762087

+0

@ user1762087我可以欣赏这一点。但是,这种方法确实避免了产生Jon方法产生的警告。但是,如果您没有检查DateTime :: getLastErrors()作为警告,那么这对您而言不是问题。 – vascowhite