js奇怪的日期转换

时间:2018-03-16 09:21:21

标签: javascript date timezone

我有一份显示自然人个人记录的申请,包括生日。一切都进展顺利,直到有人指出日期错误一天的事实。我开始挖掘一下,在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'))




1 个答案:

答案 0 :(得分:0)

我相信你有一个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