繁体   English   中英

Javascript中两个日期初始化的差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM