我试图将Javascript格式的字符串转换为我可以在PHP中用于过滤的格式。
我给出的日期字符串示例是 " 2015年1月1日星期四00:00:00 GMT-0800(太平洋标准时间)"
我们说我已将其分配给变量$ z。当我运行以下内容时,我得到了意想不到的结果:
$z = "Thu Jan 01 2015 00:00:00 GMT-0800 (Pacific Standard Time)";
$value = date('Y-m-d H:i:s', strtotime($z));
这给了我$ value =" 1970-01-01 00:00:00",显然不是我想要的。我还试过以下但没有运气:
$value = DateTime::createFromFormat('D M d Y H:i:s',$z); //Fails
现在我非常确定时区信息是什么搞乱了一切,但我似乎无法弄清楚这里要做什么。我使用Laravel 5,所以我也尝试过与Carbon类似的操作。有没有人有什么建议?
答案 0 :(得分:3)
您的代码提供错误Trailing data
(使用DateTime::getLastErrors()
)。这是因为您的模式在时间(GMT-0800 (Pacific Standard Time)
)之后没有考虑时区。
因此,您需要使用T运算符来匹配GMT-0800部分,并使用通用+符号来完成剩下的部分。你的最终模式将是:
$value = DateTime::createFromFormat('D M d Y H:i:s T +',$z);
给出了
DateTime Object
(
[date] => 2015-01-01 00:00:00.000000
[timezone_type] => 1
[timezone] => -08:00
)
祝你好运!