Javascript SetMonth 问题
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
对象将 DST 考虑在内,以避免更改一天中的时间;但是当您查看 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 工作,或者至少在当月 DST 不改变的时区(例如,在英国不改变;我们不改变)更改至 3 月下旬)。但在您当地的时区,显然 DST 发生在该月,因此您在本地看到问题,但在 docker 节点上看不到。
我正在做单元测试。
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
对象将 DST 考虑在内,以避免更改一天中的时间;但是当您查看 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 工作,或者至少在当月 DST 不改变的时区(例如,在英国不改变;我们不改变)更改至 3 月下旬)。但在您当地的时区,显然 DST 发生在该月,因此您在本地看到问题,但在 docker 节点上看不到。