所以我有这个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(浪漫标准时间)
任何想法发生了什么?
答案 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