JavaScript未正确舍入日期

JavaScript未正确舍入日期,javascript,date,Javascript,Date,//预计:2016-04-01实际:2016-04-01 控制台日志(第四季度(新日期(“2016-05-30T23:39:35.418Z”); //预计日期:2016-04-01实际日期:2016-05-01 控制台日志(第四季度(新日期(“2016-05-31T00:21:55.875Z”)); //预计日期:2016-04-01实际日期:2016-04-01 控制台日志(第四季度(新日期(“2016-06-10T00:11:22.124Z”); 第四季度功能(日期){ var monthI

//预计:2016-04-01实际:2016-04-01
控制台日志(第四季度(新日期(“2016-05-30T23:39:35.418Z”);
//预计日期:2016-04-01实际日期:2016-05-01
控制台日志(第四季度(新日期(“2016-05-31T00:21:55.875Z”));
//预计日期:2016-04-01实际日期:2016-04-01
控制台日志(第四季度(新日期(“2016-06-10T00:11:22.124Z”);
第四季度功能(日期){
var monthIndex=Math.floor(date.getUTCMonth()/3);
date.setUTCHours(0,0,0,0);
日期:设定月数(月数*3);
日期:设定日期(1);
返回日期。toISOString();

}
正如泰勒·罗珀(Tyler Roper)和徐福克斯(Xufox)在评论中所建议的那样,日期应设置在月份之前。如果您先更改月份,它可能会与日期冲突,因为新月份可能没有该日期。第二个例子就是这样。如果先将日期更改为1,然后再更改月份是很容易的

function roundToQuarter( date ) {
    date.setUTCHours ( 0, 0, 0, 0 );
    date.setUTCDate( 1 );
    date.setUTCMonth( Math.floor( date.getUTCMonth() / 3 ) * 3 );

    return date.toISOString();
}

在第二个示例中,当您通过执行
setUTCMonth
将月份设置为
April
时,该行有效地将日期更改为
2016-04-31
,对吗?问题是:四月没有31天。JS认为这是在帮你的忙,于是将4月31日改为5月1日。在月份之前设置日期。你可以同时设置月份和日期:
date.setUTCMonth(month,date)
其中month和date可以是表达式。