我正在使用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 ;。我错过了什么?
答案 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