将Javascript日期字符串转换为PHP日期[重复]

Posted

技术标签:

【中文标题】将Javascript日期字符串转换为PHP日期[重复]【英文标题】:Converting Javascript date string to PHP date [duplicate] 【发布时间】:2015-10-01 05:48:19 【问题描述】:

我一直在尝试将 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 进行类似的操作。有没有人有什么建议?

【问题讨论】:

【参考方案1】:

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

祝你好运!

【讨论】:

Wahib:感谢您的帮助!你知道,我尝试了格式 'D M d Y H:i:s |'之前因为我认为管道符号会做 + 做的事情。显然不是。非常感谢您的帮助! @Wahib,谢谢伙计!我去了 DateTime::createFromFormat('D M d Y H:i:s e',$z);从“Thu Jan 01 2015 00:00:00 GMT-0800”创建日期。将 e 替换为您建议的 T + ,它就像手套一样使用(标准时间)的完整日期。非常感谢!

以上是关于将Javascript日期字符串转换为PHP日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:正确地将日期字符串转换为日期对象

使用 Javascript 将 Excel 日期序列号转换为日期

使用 Javascript 将 Excel 日期序列号转换为日期

将 .NET 日期/时间格式字符串转换为 Javascript 日期/时间格式字符串

JavaScript 之日起对象(转)

JavaScript:将 UTC 日期时间转换为传递时区的日期时间