Jea*_*les 5 javascript datetime date
为什么这两个日期不同:
var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setMonth(10); // month (from 0-11)
date1.setDate(1); // day of the month (from 1-31)
var date2 = new Date(2012, 10, 1, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
结果:
Date 1 : Sat Dec 01 2012 14:56:16 GMT+0100
Date 2 : Thu Nov 01 2012 00:00:00 GMT+0100
Run Code Online (Sandbox Code Playgroud)
而这两个日期是等于:
var date3 = new Date();
date3.setFullYear(2012); // year (four digits)
date3.setMonth(9); // month (from 0-11)
date3.setDate(1); // day of the month (from 1-31)
var date4 = new Date(2012, 9, 1, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
结果:
Date 3 : Mon Oct 01 2012 14:56:16 GMT+0200
Date 4 : Mon Oct 01 2012 00:00:00 GMT+0200
Run Code Online (Sandbox Code Playgroud)
另一个问题是为什么要date1.setMonth(10)在12月给出一个日期(应该是11月).
Jon*_*eet 10
终于明白了.new Date()将日期设置为当前日期和时间.换句话说,10月31日(撰写本文时).
当您尝试将月份设置为11月时,该怎么办?十一月只有30天......所以它将它包裹到十二月.
如果您更改订单以便设置月份之前的日期,则可以:
var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setDate(1); // day of the month (from 1-31)
date1.setMonth(10); // month (from 0-11)
Run Code Online (Sandbox Code Playgroud)
或者如jbabey的回答所暗示的那样:
var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setMonth(10, 1); // month (from 0-11) and day (1-31)
Run Code Online (Sandbox Code Playgroud)
文档并不十分清楚,但它至少是暗示性的:
如果指定的参数超出预期范围,则setMonth会尝试相应地更新Date对象中的日期信息.例如,如果对monthValue使用15,则年份将增加1(年+ 1),3将用于月份.
("相应"远非精确,但这意味着实施至少可以证明是正确的......)