JavaScript中的 new Date(..). toisostring()在一年中的某一天给出了错误的结果.<



我正在制作一个日历,我注意到一年中的某一天的日期是错误的。

我想把日期标准化到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))

相关内容

  • 没有找到相关文章

最新更新