时刻-时区:带有时区的Unix时间戳

8ulbf1ek  于 2022-09-21  发布在  Unix
关注(0)|答案(3)|浏览(229)

我将Momentjs.com与NodeJS结合使用,并尝试获取多个时区的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
zbsbpyhn

zbsbpyhn1#

Unix Timestamp“始终”基于UTC。地球上所有地方的时间戳都是一样的。

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

cotxawn7

cotxawn72#

您可以使用Date.parse获取时间戳,如下所示

const moment = require("moment-timezone")

const time = '2022-09-02 04:06:25'
var a = new Date(time).valueOf()                            
var b = Date.parse(moment.tz(time, "America/Chicago").format())

console.log(a)   // China 1662062785000  
console.log(b) // Chicago 1662109585000
enyaitl3

enyaitl33#

为了向用户显示不同时区的正确时间,我们可以在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')

相关问题