JavaScript Date Bug 2014年2月

时间:2014-04-30 18:55:39

标签: javascript date

所以我有这个JS代码:

var d1 = new Date();
d1.setFullYear(2014);
d1.setMonth(1);
d1.setDate(1);

应该是2014年2月1日,对吗?只有它不是......它返回Mar-01-2014(实际上,完整值是“2014年3月1日20:54:29 GMT + 0100(浪漫标准时间)”)。我勒个去?任何其他日期值都会发生同样的事情。

但是,如果我使用此代码,它可以正常工作:

var d1 = new Date(2014, 1, 1, 0, 0, 0, 0);

结果是:2014年2月1日星期六00:00:00 GMT + 0100(浪漫标准时间)

任何想法发生了什么?

4 个答案:

答案 0 :(得分:5)

这里发生了什么,换行:

您可以使用今天的日期创建新的约会对象。

var d1 = new Date(); // d1 = 2014-04-30

然后你将年份设置为2014年,它已经是,所以没有真正发生。

d1.setFullYear(2014); // d1 = 2014-04-30

这里是棘手的部分,因为现在你将月份改为2月份。但这会使2月30日(2014-02-30)的日期不存在,因此JavaScript会尝试找到最接近的有效日期,即3月1日(2014-03-01)。

d1.setMonth(1); // d1 = 2014-02-30 is not valid so JS makes it 2014-03-01

然后你将日期设置为月份的第一天,它已经是,所以这里也没有真正发生。

d1.setDate(1) // d1 = 2014-03-01

答案 1 :(得分:2)

您需要先调用setDate。基本上它抓住月份并使用当前日期,并且从2月开始没有30日,它默认为3月。

答案 2 :(得分:0)

试试这个:

d1.setFullYear(2014);
d1.setDate(1);
d1.setMonth(1);

你在做什么:

d1.setFullYear(2014);  // change year to 2014 (30 Apr 2014 -> 30 Apr 2014)
d1.setMonth(1);        // change month to 1 (30 Apr 2014 -> 30 Feb 2014, really 2 Mar 2014)
d1.setMonth(1);        // change day of month to 1 (2 Mar 2014 -> 1 Mar 2014)

首先设置日期,您需要在更改月份之前将日期更改为2014年4月1日。

答案 3 :(得分:0)

最好初始化日期,而不是默认为当前日期。

var d1 = new Date(0); // 1 January 1970 00:00:00 UTC