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

时间:2013-02-14 04:56:02

标签: php javascript date datetime timestamp

我在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 个答案:

答案 0 :(得分:24)

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

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);

答案 1 :(得分: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");

答案 2 :(得分: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