所以我有这个JS代码:
var d1 = new Date();
d1.setFullYear(2014);
d1.setMonth(1);
d1.setDate(1);
Run Code Online (Sandbox Code Playgroud)
应该是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(浪漫标准时间)
有什么想法发生了什么?
这是正在发生的事情,一行一行:
您使用今天的日期创建一个新的日期对象.
var d1 = new Date(); // d1 = 2014-04-30
Run Code Online (Sandbox Code Playgroud)
然后你将年份设置为2014年,它已经是,所以没有真正发生.
d1.setFullYear(2014); // d1 = 2014-04-30
Run Code Online (Sandbox Code Playgroud)
这是棘手的部分,因为现在你将月份改为2月份.但这会使2月30日(2014-02-30)日期不存在,因此JavaScript将尝试找到最接近的有效日期,即March(2014-03-01)的第一个.
d1.setMonth(1); // d1 = 2014-02-30 is not valid so JS makes it 2014-03-01
Run Code Online (Sandbox Code Playgroud)
然后你将日期设置为月份的第一天,它已经是,所以这里也没有真正发生.
d1.setDate(1) // d1 = 2014-03-01
Run Code Online (Sandbox Code Playgroud)