2015-07-13 165 views
0

我被困在试图将Javascript格式的字符串转换为我可以在PHP中用于过滤的格式。将Javascript日期字符串转换为PHP日期

是我给出的日期字符串的一个例子是 “星期四2015年1月1日00:00:00 GMT-0800(太平洋标准时间)”

比方说,我有一个分配给一个变量$ ž。当我运行下面,我得到了意想不到的结果:

$z = "Thu Jan 01 2015 00:00:00 GMT-0800 (Pacific Standard Time)"; 
$value = date('Y-m-d H:i:s', strtotime($z)); 

这给了我$值=“1970-01-01 00:00:00”,显然不是我想要的东西。我也试过,没有运气以下:

$value = DateTime::createFromFormat('D M d Y H:i:s',$z); //Fails 

现在我敢肯定的是,时区信息是什么是搞乱了一切,但我似乎无法找出什么在这里做。我使用的是Laravel 5,所以我也尝试过与Carbon进行类似的操作。有没有人有什么建议?

回答

2

您的代码给出了错误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 
) 

祝你好运!

+1

Wahib:感谢您的帮助!你知道,我试过格式'D M D Y H:我:S |'之前因为我认为管道符号会做+的。显然不是。非常感谢您的帮助! – ChemProfMatt