php日期时间createformat解析
我正在尝试分析以下字符串:php日期时间createformat解析,php,date,Php,Date,我正在尝试分析以下字符串: 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->form
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');
但是(显然)我也应该能够解析第一个示例。那么你有什么建议,正确的格式应该是什么样的呢
我得到的错误是:
Fatal error: Call to a member function format() on a non-object in C:\....
调用$date->format之前$date的var_转储:
boolean false
您可以拆分传入的字符串。以下是给这只猫剥皮的一种方法:-
$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]);
请参阅以获取更多帮助
.问题在于格式字符串,应该是
D M d Y H:i:s e+
我将eO
替换为e
,因为输入包含GMT+0200
,它在“GMT”和偏移量之间没有分隔符。我还将(*)
部分替换为+
,这是唯一可以使用可变输入量的说明符(*
匹配一个标记,即一个单词——如果在解析失败后有更多输入)
请注意,由于使用了
+
(使用日期时间::getLastErrors
查看它),仍然会出现警告,但转换将正常工作。它给出了什么错误您看到的错误是什么?另外,您是否在-->e O',[此处?]周四(十月)遗漏了撇号?是的,对不起,ctrl+c ctrl+v打字错误。我还用error编辑了这个问题,在调用format()之前,var_dump($date)输出了什么?false(也添加到问题中)您可以链接到文档以使用“+”吗。我可能遗漏了什么,但在atm机上找不到任何东西。@vascowhite:,在桌子的底部。@Jon谢谢,遗漏了。是的,我也在想同样的事情,但试图避免那个解决方案:-)@user1762087我很感激。然而,这种方法确实避免了Jon的方法产生的警告。但是,如果您没有检查DateTime::getLastErrors()中的警告,那么这对您来说不是问题。