为什么Javascript'的日期()函数中断我的生日在Safari

Why does Javascript's Date() function break for my birthday in Safari?

本文关键字:中断 函数 我的 生日 Safari Javascript 日期 为什么      更新时间:2023-09-26

在Safari中运行的Javascript与我的生日有关。对我来说,这有时会破坏表单的验证(因为表单用javascript输出检查输入,并且日期不再匹配)。我很想知道为什么会这样。

我的生日是1985年10月6日。在Javascript中,我使用:
new Date(1985, 09, 06)

(注意月份是零索引的,但是日和年不是)

// My birthday
console.log("1985, 09, 06: " + new Date(1985, 09, 06))
// One day earlier/later
console.log("1985, 09, 07: " + new Date(1985, 09, 07))
console.log("1985, 09, 05: " + new Date(1985, 09, 05))
// One month earlier/later
console.log("1985, 10, 06: " + new Date(1985, 10, 06))
console.log("1985, 08, 06: " + new Date(1985, 08, 06))
// One year earlier/later
console.log("1986, 09, 06: " + new Date(1986, 09, 06))
console.log("1984, 09, 06: " + new Date(1984, 09, 06))

在Safari中运行此命令的结果如下:

// My birthday (note the day is wrong, and the time is 11pm)
Sat Oct 05 1985 23:00:00 GMT+1000 (AEST)
// One day earlier/later
Mon Oct 07 1985 00:00:00 GMT+1100 (AEDT)
Sat Oct 05 1985 00:00:00 GMT+1000 (AEST)
// One month earlier/later
Wed Nov 06 1985 00:00:00 GMT+1100 (AEDT)
Fri Sep 06 1985 00:00:00 GMT+1000 (AEST)
// One year earlier/later
Mon Oct 06 1986 00:00:00 GMT+1100 (AEDT)
Sat Oct 06 1984 00:00:00 GMT+1000 (AEST)
https://jsfiddle.net/27bupLr9/

在Chrome中,我的生日是正确创建的:

console.log(new Date(1985, 09, 06))
Sun Oct 06 1985 00:00:00 GMT+1000 (AEST)

此问题已在macOS High Sierra中解决。