将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 将 Excel 日期序列号转换为日期
使用 Javascript 将 Excel 日期序列号转换为日期