Javascript SetMonth Issue



我正在做单元测试。

it("Month calculate", () => {
const baseDate = new Date("2015-02-15T12:00:00.000Z");
baseDate.setMonth(baseDate.getMonth() + 1)
expect(baseDate.toISOString()).toBe("2015-03-15T12:00:00.000Z")
})

在我的本地节点进程中,我得到这个错误

Expected: "2015-03-15T12:00:00.000Z"
Received: "2015-03-15T13:00:00.000Z"

在docker节点进程中工作

我相信这与夏令时有关,但我不明白为什么…

你是对的,夏令时开始发挥作用,因为你使用的是本地时间setMonth/getMonth方法,因此加入夏令时(添加月份时,Date对象考虑夏令时,避免改变一天中的时间;但是当您查看UTC的结果时,您会看到时间偏离了DST偏移量,因为它是应用于增量的本地时间数学)。要像其他代码一样在UTC中工作,请使用setUTCMonth/getUTCMonth

it("Month calculate", () => {
const baseDate = new Date("2015-02-15T12:00:00.000Z");
baseDate.setUTCMonth(baseDate.getUTCMonth() + 1)
expect(baseDate.toISOString()).toBe("2015-03-15T12:00:00.000Z")
})

很可能你的docker节点正在工作UTC,或者至少在一个夏令时在那个月不会改变的时区(例如在英国就不会改变;我们要到3月底才会更改)。但是在您的本地时区,显然夏令时发生在那个月,所以您在本地看到问题,而不是在docker节点上。

相关内容

  • 没有找到相关文章

最新更新