我正在尝试将字符串转换为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);

如果没有为构造函数提供任何参数,它将根据系统设置使用当前日期和时间

因此,分别使用setMonthsetDate仍会导致意外结果。

如果设置的值大于其逻辑范围,则该值将自动调整为相邻的值

例如,如果今天是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/

10-11 12:58