首页 > 解决方案 > momentjs 时区提供不一致的小时数

问题描述

我在服务器端的 nodejs/express 应用程序中使用时刻时区。问题在于该tz()函数返回不一致的结果,我不明白为什么。这就是我正在做的事情:

items.forEach(function(item){
 moment(item.start.date).hour(5).minute(0).tz(Europe/Vienna).format()
})

item.start.date以谷歌date格式(不是dateTime格式),像这样2019-03-31:)它有时会返回+1小时,有时会+2像这样返回:

2018-05-20T07:00:00+02:00
2018-08-15T07:00:00+02:00
2018-12-25T06:00:00+01:00
2018-12-26T06:00:00+01:00
2018-12-08T06:00:00+01:00
2019-01-01T06:00:00+01:00
2019-01-06T06:00:00+01:00
2018-05-21T07:00:00+02:00
2018-05-31T07:00:00+02:00
2018-11-01T06:00:00+01:00
2018-11-02T06:00:00+01:00
2018-12-02T06:00:00+01:00
2018-12-31T06:00:00+01:00
2018-10-26T07:00:00+02:00
2019-04-14T07:00:00+02:00
2019-04-22T07:00:00+02:00
2019-05-01T07:00:00+02:00
2019-04-19T07:00:00+02:00
2019-04-21T07:00:00+02:00
2018-10-28T06:00:00+01:00
2019-03-31T07:00:00+02:00

非常感激你的帮助!非常感谢!

标签: momentjs

解决方案


由于时间的原因,您正在获得+1和小时。要解析时间,您可以查看此链接:+2Daylight SavingsDST

https://momentjs.com/timezone/docs/#/using-timezones/parsing-ambiguous-inputs/

以防万一,要重新确认您获得的上述日期是否为夏令时格式,您可以使用momentjs 的isDST()函数。下面是一个例子:

let isDaylightSaving = moment("2018-05-20T07:00:00+02:00").isDST();
console.log(isDaylightSaving);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>


推荐阅读