【问题标题】:Time zone confusion processing javascript generated date in php时区混淆处理javascript在php中生成的日期
【发布时间】:2013-05-12 04:15:06
【问题描述】:

我位于 (PDT) 时区,时间为 2013 年 5 月 11 日星期六 20:58:51(我的时间)我使用以下代码生成了日期/时间。

var date = new Date();
alert(date);

这会返回结果

"Sat May 11 2013 20:58:51 GMT-0700 (PDT)"

如果我随后将此日期发布到一个 php 脚本,该脚本以下列方式处理它:

$date  = date('Y-m-d H:i:s', strtotime("Sat May 11 2013 20:58:51 GMT-0700 (PDT)"));

echo json_encode($date);

我得到结果

"2013-05-12 03:58:51"

不是我所期望的。如果我从我的日期/时间中删除“GMT-0700 (PDT)”部分,我只会得到预期的时间。所以我有两个问题。

  1. 谁能告诉我如何在不使用字符串函数/正则表达式的情况下生成这种格式的日期,但在 javascript 中没有“GMT-0700 (PDT)”部分?

  2. 是我的浏览器给了我错误的时区,还是 php 错误地解释了时区。无论哪种情况,为什么?

【问题讨论】:

    标签: php javascript date time timezone


    【解决方案1】:

    JavaScript 始终采用您的本地服务器时区,而 PHP 将您的日期转换为 UTC,因此您需要在使用 strtotime 之前设置您的服务器时区,如下所示,

    date_default_timezone_set('America/Los_Angeles');
    $date  = date('Y-m-d H:i:s', strtotime("Sat May 11 2013 20:58:51 GMT-0700 (PDT)"));
    echo json_encode($date);
    

    DEMO.

    或者如果您想将您的 js 日期转换为 UTC 而不是使用,

    var date = new Date();
    var utcdate = date.toUTCString()
    

    【讨论】:

    • 感谢您的回复。您的解释很有说服力,但是当我在浏览器中运行第一个代码块时,它仍然返回意外的日期/时间“2013-05-12 03:58:51”。
    • 如果你有查看我的演示链接。你可以有一个更好的主意。
    • 是的,演示链接似乎可以正常工作,但它产生的结果与我在 XAMPP 服务器上运行代码时产生的结果不同。
    • (PDT) 又名太平洋夏令时
    【解决方案2】:
    $date  = date('r', strtotime("Sat May 11 2013 20:58:51 GMT-0700 (PDT)"));
    

    【讨论】:

      【解决方案3】:

      1-echo date("l F j, Y, H:i s");

      2-

      date_default_timezone_set('America/Los_Angeles');
      $postedDate = "Sat May 11 2013 20:36:24 GMT-0700 (PDT)";
      
      $date  = date('Y-m-d H:i:s ', strtotime($postedDate));
      
      echo json_encode($date);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        相关资源
        最近更新 更多