PHP的strtotime和JavaScript的Date.parse返回不同的时间戳

21

我在 JavaScript 中得到了与 PHP 的 strtotime() 给出的相同日期时间秒值。但我需要在 JavaScript 中获得相同的值。

PHP 代码

echo strtotime("2011-01-26 13:51:50");
// 1296046310

JavaScript代码

var d = Date.parse("2011-01-26 13:51:50");
console.log(d);
// 1296030110000
3个回答

25

您需要使用相同的时区进行合理的比较:

echo strtotime("2011-01-26 13:51:50 GMT");
// 1296049910

var d = Date.parse("2011-01-26 13:51:50 GMT") / 1000;
console.log(d);
// 1296049910

更新

根据标准,只有采用 RFC 2822 格式的日期得到良好支持:

Date.parse("Wed, 26 Jan 2011 13:51:50 +0000") / 1000

要生成这样的日期,你可以在PHP中使用gmdate('r')

echo gmdate('r', 1296049910);

在Mozilla浏览器中出现NaN - Chinmay235

4

JavaScript使用毫秒作为时间戳,而PHP使用秒。因此,你会得到非常不同的日期,因为它偏移了1000倍。

示例

echo date('Y-m-d', TIMESTAMP / 1000);

评论回复

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

    function toTimestamp(year,month,day,hour,minute,second)
    {
        var datum = new Date(Date.UTC(year,month-1,day,hour,minute,second));
        return datum.getTime()/1000;
    }

    $(function()
    {
        console.log(toTimestamp(2011,01,26,13,51,50));

    });

</script>

<?php

echo $the_date = strtotime("2011-01-26 13:51:50");

1
这不是唯一的区别 :) - Ja͢ck
@jack 我知道时区也很重要,但我只提供了秒差异,因为第一部分已经由你提供了。 - Dipesh Parmar

3

strtotime()Date.parse() 分别返回以秒和毫秒为分辨率的 UNIX 时间戳。但是,如果输入字符串中缺少时区信息,则假定为本地时间。因此,即使在两台使用 PHP(或 JavaScript)生成时间戳的计算机上,输入字符串 2011-01-26T13:51:50 也可能产生不同的输出。

解决方案是在字符串中明确指定时区。这应该在任何计算机上产生相同的结果:

Date.parse("Jan 26, 2011 13:51:50 GMT+0500") / 1000; // 1296031910
strtotime("Jan 26, 2011 13:51:50 GMT+0500");         // 1296031910

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接