我正在尝试将字符串转换为Date对象,并且它适用于所有日期,除了12月31日(按对象说12月1日而不是31日)之外。我不知道为什么。这是我的JavaScript
代码:
var dt = new Date();
dt.setDate("31");
dt.setMonth("11");
dt.setFullYear("2014");
但我的变量值为:
Mon Dec 01 2014 11:48:08 GMT+0100 (Paris, Madrid)
如果我在其他任何日期都这样做,则我的对象将返回适当的值。你知道我做错了什么吗?
最佳答案
setMonth
应该在setDate
之前:(对于少于31天的月份来说不安全)
var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11);
dt.setDate(31);
setMonth
的第二个参数也可以用来设置日期。var dt = new Date();
dt.setFullYear(2014);
dt.setMonth(11, 31);
如果没有为构造函数提供任何参数,它将根据系统设置使用当前日期和时间。
因此,分别使用
setMonth
和setDate
仍会导致意外结果。如果设置的值大于其逻辑范围,则该值将自动调整为相邻的值。
例如,如果今天是
2014-09-30
,则var dt = new Date();
dt.setFullYear(2014); /* Sep 30 2014 */
dt.setMonth(1); /* Mar 02 2014, see, here the auto adjustment occurs! */
dt.setDate(28); /* Mar 28 2014 */
为避免这种情况,请直接使用构造函数设置值。
var dt = new Date(2014, 11, 31);
关于javascript - 设置为2014年12月31日的新Date()改为说12月1日,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25741647/