2015-12-28 297 views
1

我使用moment.js转换一堆的时间戳在它的特定的时区,以Unix时间戳是这样的: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”。我错过了什么?

+0

UNIX或POSIX格式没有时区的概念 – Bek

回答

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

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

一刻只是做这样

function unix() { 
    return Math.floor(+this/1000); 
} 

凡日期对象转换为整数,然后从毫秒转换为秒的东西。

的出发点是常规的JavaScript Date对象,而ECMA标准说

Date对象是基于是自1970年1月1日,UTC的 毫秒数的时间值。

所以当从1月1 1970(时代)转换为毫秒数,即您不能设置另一个时区上的Unix时间戳日期对象总是UTC,无论您的日期相同。

0

正如您试图找出日期“2015-12-29T09:35:00.000-08:00”的unix时间戳。在此日期格式中,时区值已存在,即“-08:00”,因此您将获得相同的unix时间戳。

为了得到Unix时间戳所需溶液,取出的时区值,并使用矩时区为:

的console.log(moment.tz(“2013年12月1日”,“美国/洛杉矶” ).unix());

有关详情,请moment-timezone