我有非常奇怪的情况,我使用setUTCMonth()
方法为日期对象设置UTC月值。但它增加了两倍。
我的书面代码在控制台的开始和结束日输出。
// user input
var start_month = 1;
var start_year = 2013;
var end_month = 6;
var end_year = 2013;
// code
start_month = start_month - 1;
end_month = end_month - 1;
var start_date = new Date();
start_date.setFullYear(start_year);
start_date.setUTCMonth(start_month);
var end_date = new Date(end_year, end_month);
end_date.setFullYear(end_year);
end_date.setUTCMonth(end_month);
console.log('<< START >>');
start_end_log(start_date, end_date);
function start_end_log(start_date, end_date){
if(start_date.getFullYear() == end_date.getFullYear()
&& start_date.getUTCMonth() == end_date.getUTCMonth()
){
console.log('<< THE END >>');
return;
}
start_date.setUTCDate(1); // go back to frist day of the month
var start_date_str = start_date.toISOString().substr(0, 10); // get first day
start_date.setUTCMonth(start_date.getUTCMonth() + 1); // increase to next month
start_date.setUTCDate(0); // go back to last day of last month
var end_date_str = start_date.toISOString().substr(0, 10); // get last day
console.log('start date: ' + start_date_str + ' End date: ' + end_date_str);
var month = start_date.getUTCMonth();
console.log('current month ' + month);
month++;
console.log('after increment month ' + month);
start_date.setUTCMonth(month); // go to next month
console.log('Check after setting month ' + start_date.getUTCMonth()); // why it is increasing by 2? :(
start_end_log(start_date, end_date);
}
JS小提琴http://jsfiddle.net/jhg7ddjh/
我在控制台上设置之后输出月份编号。我不明白它是如何增加两倍的。
在致电getUTCMonth()
之前,需要将日期设置回下个月可用的日期。
已更改
start_date.setUTCMonth(month); // go to next month
以
start_date.setUTCDate(1);
start_date.setUTCMonth(month); // go to next month
答案 0 :(得分:2)
这一行:
start_date.setUTCDate(0); // go back to last day of last month
...表示start_date
将在一个月的最后一天。在您的示例中,该月份是1月,其中包含31天,因此现在start_date
位于31/01/2015
上(尽管start_date_str
为"01/01/2015"
,并且您使用start_date_str
} {而非start_date
,在console.log
语句中,读取输出相当混乱。
然后你做
var month = start_date.getUTCMonth();
console.log('current month ' + month);
month++;
console.log('after increment month ' + month);
...在月份值为31的日期将月份设置为1(2月),给你(理论上)31/02/2015
- 你看到了问题,2月份没有31天
JavaScript日期非常明智,因此会将其调整为03/03/2015
(3月,2月),因此当您拨打getUTCMonth
时,您将返回2而不是1。