我有一个应用程序,显示自然人的个人记录,包括出生日期。一切都很顺利,直到有人指出日期一天不正确的事实。我开始挖掘一下,在 JS Date 对象上发现了这种奇怪的行为:
new Date('1969-10-25T00:00:00')
> Date 1969-10-24T22:00:00.000Z => off by 2h!?
new Date('1969-10-26T00:00:00')
> Date 1969-10-25T22:00:00.000Z => off by 2h!?
new Date('1969-10-27T00:00:00')
> Date 1969-10-26T23:00:00.000Z => off by 1h as expected
new Date('1969-10-28T00:00:00')
> Date 1969-10-27T23:00:00.000Z => off by 1h as expected
对于 1969-10-27 之后出生的任何人,日期显示正确,对于之前出生的任何人来说,日期错误一天。
我位于法国。我已经看了一下日光问题,但没有找到任何相关信息。
2个问题:
- 这一天有什么特别 的吗?
- 我怎样才能以一种好的方式解决这个问题?(即:没有涉及正则表达式和女巫的丑陋魔法日期时间/字符串修复(
console.log(new Date('1969-10-25T00:00:00'))
console.log(new Date('1969-10-26T00:00:00')) // DST change
console.log(new Date('1969-10-27T00:00:00'))
console.log(new Date('1969-10-28T00:00:00'))
console.log("-----------------------")
console.log(new Date('2017-11-04T00:00:00'))
console.log(new Date('2017-11-05T00:00:00')) // DST change
console.log(new Date('2017-11-06T00:00:00'))
您有一个 UTC 问题,我(在意大利(有与您相同的结果,但这给出了所需的结果:
new Date ('1969-10-24T22:00:00.000+02:00')
作为旁注,由于浏览器不一致,不鼓励使用构造函数的 dateString 版本:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date