【问题标题】:Converting Javascript date string to PHP date [duplicate]将Javascript日期字符串转换为PHP日期[重复]
【发布时间】: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 进行类似的操作。有没有人有什么建议?

【问题讨论】:

    标签: php date datetime laravel


    【解决方案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 + ,它就像手套一样使用(标准时间)的完整日期。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 2011-06-08
    • 1970-01-01
    • 2016-12-24
    • 2011-02-27
    • 2011-06-13
    • 2016-05-11
    • 2014-03-23
    相关资源
    最近更新 更多