0

可能重复:
Javascript 中两个日期的初始化差异

关于 Javascript Date 对象的初始化,我得到了一个奇怪的结果。我正在尝试将 1st Feb 2012 初始化为 JavaScript Date 对象。第一种方法是通过构造函数,我得到了所需的结果(2012 年 2 月 1 日)。第二种方法是通过一个空的构造函数,并设置每个字段,我得到的结果完全不同。(2012 年 3 月 2 日)。当我将月份设置为 1 月、3 月、5 月时,这种方式有效。但是当月份是二月,四月,六月时失败。

请参考下面的代码。

代码摘录1:

var year = 2012;
var mth = 1;
var dy = 1;
var hrs = 0;
var min = 0;
var sec = 0;
var ms = 0;

//Result here gives me 1st Feb 2012
var dt = new Date(year, mth, dy, hrs, min, sec, ms);
alert("Date 1 : " + dt.toString());

//Result here gives me 1st March 2012
var dt2 = new Date();
dt2.setFullYear(year);
dt2.setMonth(mth);
dt2.setDate(dy);
dt2.setHours(hrs);
dt2.setMinutes(min);
dt2.setSeconds(sec);
dt2.setMilliseconds(ms);
alert("Date 2 : " + dt2.toString());

如果有人帮助解释为什么会发生这种情况,我将不胜感激。这是一个 JavaScript 错误吗?

谢谢。

==================================================== =================================

更新:在这个线程上找到了解决方案。 Javascript中两个日期的初始化差异

撰写本文时的当前日期是 2013 年 1 月 31 日。 DateTime() 给出当前日期和时间,因此 dt 是 2013 年 1 月 31 日。

因此,当 dt.setMonth 先出现时,它会尝试将 2013 年 1 月 31 日设置为 2013 年 2 月 31 日,这是无效的。因此 Javascript 将其默认为 2013 年 3 月 31 日。

然后 dt.setDate 进入,Javascript 将日期更改为 2013 年 3 月 1 日。当我们在 Javascript 中设置日期时,顺序很重要。

4

0 回答 0