我在 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
我在 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
您需要使用相同的时区进行合理的比较:
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);
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");
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
NaN
。 - Chinmay235