moment.js不会将具有特定时区的时间戳转换为unix时间戳

时间:2015-12-28 12:37:01

标签: javascript momentjs

我正在使用moment.js将其中特定时区的一堆时间戳转换为这样的unix时间戳:

var timestamp = "2015-12-29T09:35:00.000-08:00";
console.log(moment("2015-12-29T09:35:00.000-08:00").unix();
console.log(moment("2015-12-29T09:35:00.000-08:00").tz("America/Los_Angeles").unix();

上述两个语句的控制台日志出于某种原因,相同 - 1451361900.它记录的这个unix时间戳位于我当地的时区而不是我要求的那个:" America / Los_Angeles&#34 ;。我错过了什么?

3 个答案:

答案 0 :(得分:2)

unix时间戳或Posix应始终采用UTC(协调世界时)格式。

片刻就是做

之类的事情
function unix () {
    return Math.floor(+this / 1000);
}

将date对象转换为整数然后从毫秒转换为秒。

起点是常规的javascript Date对象,ECMA标准说

  

日期对象基于时间值,即时间值   自1970年1月1日UTC以来的毫秒数。

因此日期对象在转换为自1970年1月1日(纪元)以来的毫秒数时始终为UTC,即您无法在Unix时间戳上设置另一个时区,两个日期都相同。

答案 1 :(得分:0)

正确的方法是使用时刻 - 时区就是这个。

console.log(moment("2015-12-29T09:35:00").unix());
console.log(moment.tz("2015-12-29T09:35" , "America/Los_Angeles").unix());

在上面你也提供时区作为字符串,这是最后一部分“.000-08:00”,然后你提供另一个区域,这是不正确的。

答案 2 :(得分:0)

当您试图找出日期的#ix; 2015-12-29T09:35:00.000-08:00 "时的unix时间戳。在此日期格式中,时区值已经存在,即" -08:00 ",因此您获得相同的unix时间戳。

要获取所需的unix时间戳解决方案,请删除时区值并使用moment-timezone:

  

console.log(moment.tz(" 2013-12-01"," America / Los_Angeles")。unix());

有关详细信息,请查看moment-timezone