[英]Difference in initialization of two dates in Javascript
为什么这两个日期不同:
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);
结果 :
Date 1 : Sat Dec 01 2012 14:56:16 GMT+0100
Date 2 : Thu Nov 01 2012 00:00:00 GMT+0100
而这两个日期是相等的:
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);
结果 :
Date 3 : Mon Oct 01 2012 14:56:16 GMT+0200
Date 4 : Mon Oct 01 2012 00:00:00 GMT+0200
另一个问题是为什么date1.setMonth(10)
给出的日期是 12 月(应该是 11 月)。
终于得到了。 new Date()
将日期设置为当前日期和时间。 换句话说,10 月 31 日(在撰写本文时)。
当您尝试将月份设置为 11 月时,要做什么? 11 月只有 30 天……所以它绕到了 12 月。
如果您更改顺序以便在月份之前设置月份日期,则它可以工作:
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)
或者正如 jbabey 的回答所暗示的那样:
var date1 = new Date();
date1.setFullYear(2012); // year (four digits)
date1.setMonth(10, 1); // month (from 0-11) and day (1-31)
文档不是很清楚,但至少是暗示性的:
如果您指定的参数超出预期范围,则 setMonth 会相应地尝试更新 Date 对象中的日期信息。 例如,如果您使用 15 作为 monthValue,则年份将增加 1(年 + 1),而 3 将用于月份。
(“相应地”远非精确,但这意味着实施至少可以说是正确的......)
setMonth
接受第二个参数:
如果未指定 dayValue 参数,则使用从 getDate 方法返回的值。
当您将月份设置为10
(十一月)时,它会获取当前日期值 ( 31
) 并将其设置为日期。 由于 11 月只有 30 天,因此会将您滚动到 12 月 1 日。
您正在创建一个包含当前日期( new Date()
)的 var,然后您正在更改其中的一些键(年、月和日)。
另一方面, new Date(2012, 10, 1, 0, 0, 0, 0)
表示“创建具有这些确切值的日期对象”。
这就是为什么您的日期对象不相等的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.