【问题标题】:Send PHP date to JavaScript date format将 PHP 日期发送到 JavaScript 日期格式
【发布时间】:2012-04-03 02:19:14
【问题描述】:

我想将我的 PHP 服务器时间传递给我的 JavaScript 文件。

PHP 代码:

date_default_timezone_set('Australia/Perth');
echo date("r");

JavaScript:

$.get('time.php', function(data) {
  today = new Date(data);
  closing = new Date(data);
});

PHP 代码返回 Sun, 18 Mar 2012 12:01:23 +0800,这是澳大利亚/珀斯的正确时间。但这会返回一个无效的 JavaScript 日期对象。

当我尝试将其转换为时间戳时:

 echo strtotime(date("r"));

我得到了 JavaScript 日期 Sun Mar 18 2012 04:03:14 GMT+0000 (WET)(这是今天 js var 的值)

如果我使用:

echo gmstrftime('%s');

我知道:2012 年 3 月 17 日星期六 20:04:30 GMT+0000(湿)。

谁能帮帮我?

【问题讨论】:

  • 你为什么不直接使用PHP的time()函数呢?
  • 这是同一件事 @AustinBrunkhorst 今天返回 Sun Mar 18 2012 04:20:17 GMT+0000 (WET)

标签: php javascript date timezone timezone-offset


【解决方案1】:
$.get('time.php', function(data) {
  today = new Date(data);
  closing = new Date(data);
});

将字符串乘以 1000 的目的是什么?这个操作没有意义。

这个 PHP 可以解决这个问题。

echo date('D, d M y H:i:s')." +0000";

【讨论】:

  • 它是从unix时间戳转换的(因为毫秒),我忘了删除。无论如何返回 Sun Mar 18 2012 04:10:32 GMT+0000 (WET) 而 PHP 返回 Sun, 18 Mar 2012 12:10:32 +0800。谢谢
  • 我需要为 Sun, 2012 年 3 月 18 日 12:10:32 设置我的 javascript 日期对象,以便以下所有计算正常工作!
【解决方案2】:

Luna's answerecho date 中的 PHP 代码与 JavaScript 代码不完全相同。这将完全模仿 JavaScript 代码:

echo date('D M d Y H:i:s O');

【讨论】:

  • 这不是我在 Javascript 中看到的格式。我看到这种格式:date('D M d Y H:i:s \G\M\TO (T)');
【解决方案3】:

一个好办法是时间戳:

echo $data = time()*1000;
echo '
  <div id="setxDatetime">The current server time is: </div>
  <script type="text/javascript">
    var x = document.getElementById("setxDatetime");
    x.innerHTML = x.innerHTML + new Date(' . $data . ');
  </script>
';

1381324693000

当前服务器时间为:Wed Oct 09 2013 16:18:13 GMT+0300 (GTB Standard Time)

【讨论】:

    【解决方案4】:
    date('D M d Y H:i:s O')
    

    如果您当前的语言环境不是英语,它将无法工作。

    更好的选择是使用:

    new Date(<? echo date("Y, n - 1, d, H, i, s") ?>)
    

    【讨论】:

    • 警告:PHP 返回从 1-12 编号的月份,但 Javascript 使用 0-11。这将始终为您提供一个月前的时间戳。此外,不能简单地从 JS 日期对象中减去一个月,因为 Javascript 将在构造时“更正”日期……如果您在 1 月 31 日运行此代码,Javascript 将给出“Feb 31”,然后它会更正为 3 月 3 日(假设 2 月为 28 天)。
    • Re “当前语言环境不是英语”:你的意思是“当前语言环境不是美国英语”吗?
    • 英语是一种语言,而不是语言环境。
    【解决方案5】:

    很简单:

    new Date("<?= date('Y/m/d H:i:s'); ?>");
    

    【讨论】:

    • 这并没有改善或从任何其他答案中脱颖而出
    【解决方案6】:

    可能有更好的解决方案,但这个解决方案对我有用。关键问题是 JavaScript 使用月份 0-11,而 PHP 使用 1-12,如前所述。

    function convert_date_php_js($date) {
        $converted_date = date("Y", strtotime($date)) . ', ' .
                          (date("n", strtotime($date))-1) . ', ' .
                          date("j", strtotime($date));
        return $converted_date;
    }
    
    $priceDate = "2016-09-14";
    $d = convert_date_php_js($priceDate);
    // Returns 2016, 8, 14
    

    【讨论】:

      【解决方案7】:

      您也可以保留 PHP 代码并使用 JavaScript 解析日期:

      var date = new Date(Date.parse(DATE));
      

      那么即使是这样的事情也会起作用:

      new Date(Date.parse('11 March 2017'));
      

      通过控制台日志输出的内容(GMT+1000 是因为我在澳大利亚):

      Sat Mar 11 2017 00:00:00 GMT+1000
      

      更多信息在这里:https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

      【讨论】:

      • 正是我想要的
      • 使用内置解析器解析不受支持的格式并不是一个好主意,因为解析依赖于实现,并且在意外和难以找到的情况下很可能会失败。
      • 链接已损坏(带有相当有趣的 404 PNG 动画):“未找到。很抱歉,我们找不到您要查找的内容。”
      【解决方案8】:

      以下是 DateTime 对象的示例:

      PHP 代码(适用于 PHP 5.3 或更高版本)

      $serverDate = new \DateTime('NOW');
      
      // If you want to set a different time zone
      // $serverDate = new \DateTime('NOW', new \DateTimeZone('Australia/Perth'));
      echo $serverDate->format(DATE_ATOM);
      

      JavaScript 代码

      $.get('time.php', function(data) {
        var serverDate = new Date(data);
      });
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 2019-12-08
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多