moment-timezone:带时区的unix时间戳

时间:2016-08-26 20:11:52

标签: node.js unix timestamp momentjs

我正在使用带有nodejs的momentjs.com,我试图为多个时区获取unix时间戳,但遗憾的是输出不正确。

代码:

var moment = require('moment-timezone');

var berlin = moment.tz('Europe/Berlin').unix();
var angeles = moment.tz('America/Los_Angeles').unix();
var london = moment.tz('Europe/London').unix();

console.log(berlin);
console.log(angeles);
console.log(london);

输出:

1472241731
1472241731
1472241731

2 个答案:

答案 0 :(得分:6)

Unix Timestamp 始终基于UTC。它同时是地球上任何地方的时间戳。

使用moment-timezone更改moment对象的时区只会影响本地时间值,例如与format函数(和其他函数)一起使用。它不会改变表示的时刻,因此不会更改基础时间戳。

答案 1 :(得分:0)

要向用户显示不同时区的正确时间,我们可以将时区偏移量添加到Unix UTC时间戳记

const convertToNewTimeZone = (timeInMilliseconds: number, timezone: string) => {
  const utcOffset = moment.tz(timeInMilliseconds, timezone).utcOffset();
  return moment(timeInMilliseconds)
    .add(utcOffset, 'minutes');
};

请注意,如果您正在浏览器中计算时间,则可能必须减去浏览器时区偏移量

newTime.clone().subtract(moment().utcOffset(), 'minutes')