我正在制作一个日历,我注意到一年中的某一天的日期是错误的。
我想把日期标准化到ISO 8601。以2022-03-27
为例:
const foo = new Date(2022, 2, 27).toISOString()
这就得到了2022-03-27T00:00:00.000Z
。
2022-03-28
:
const bar = new Date(2022, 2, 28).toISOString()
给出2022-03-27T23:00:00.000Z
- 3月27日23:00。
为什么会发生这种情况?
发生的事情是英国夏令时(日光节约时间,又名DST)在你的两个例子之间开始(具体来说,它从2022-03-27 01:00开始)。toISOString
总是给你UTC时间(GMT),你可以从字符串末尾的Z
看出,但是你的本地时间在2022年3月27日01:00之后比UTC早一个小时,直到DST在2022年10月30日02:00结束。
Date
。2022-03-27午夜的时间,当你的当地时间(显然)是GMT+00:00(就像我在英国一样)。因此,toISOString
返回00:00
,因为您的本地时间是GMT/UTC(该日期/时间比DST开始前一小时)。
但是在第二个例子中,你在local中创建了一个Date
2022年3月28日午夜,也就是夏时制时间。所以你和UTC相差一个小时(UTC比你晚一个小时)。2022-03-28英国时间是午夜23:00 2022-03-27 UTC。我不知道你想用这些东西做什么,但是如果你想为2022-03-28的午夜UTC创建一个Date
,使用new Date(Date.UTC(2022, 2, 28))
。