Javascript新日期(日期字符串)处理

Javascript新日期(日期字符串)处理,javascript,Javascript,有人能解释一下为什么格式化相同的dateString会给出不同的日期吗 > new Date("04/08/1984") <· Sun Apr 08 1984 00:00:00 GMT-0600 (Mountain Daylight Time) > new Date("1984-04-08") <· Sat Apr 07 1984 18:00:00 GMT-0600 (Mountain Daylight Time) >新日期(“1984年8月4日”) 新日期(“1984

有人能解释一下为什么格式化相同的
dateString
会给出不同的日期吗

> new Date("04/08/1984")
<· Sun Apr 08 1984 00:00:00 GMT-0600 (Mountain Daylight Time)
> new Date("1984-04-08")
<· Sat Apr 07 1984 18:00:00 GMT-0600 (Mountain Daylight Time)
>新日期(“1984年8月4日”)
新日期(“1984-04-08”)

您的问题是在
“1984-04-08”
中的数字之前添加
0
。请尝试以下操作:

new Date("1984-4-8")
document.write(新日期(“1984年8月4日”);
文件。写(“
”);
书面文件(新日期(“1984-4-8”)当您创建一个新的
Date
对象并将
dateString
参数传递给构造函数时,将使用方法对其进行解析。现在,引用MDN文档(我的重点):

给定一个日期字符串
“2014年3月7日”
(或
“2014年7月3日”
),
parse()
假设一个本地时区,但给定一个ISO格式,如
“2014-03-07”
,它将假设一个UTC时区。因此,使用这些字符串生成的
Date
对象将表示不同的时间时刻,除非系统设置了UTC的本地时区

因此,由于您以ISO格式给出第二个字符串,并且您的本地时区为UTC+6,因此您得到的日期比您的日期晚了六个小时,因为它被计算为UTC+0。事实上:

1984年4月7日18:00:00=1984年4月8日00:00:00-06:00:00

谜团解开了

使用日期对象从来没有任何乐趣…:(@tymeJV没那么复杂:如果你经常要处理日期,你每天都会遇到新的棘手异常,我想这只是时间问题……是的……我非常依赖MomentJS……现在没有它很难工作。值得注意的是,
Date.parse
(扩展为
new Date
)基本上是实现定义的。如果您想要可靠的行为,那么您应该手动解析日期,或者使用诸如moment.js之类的库。