Setting UTC date seems to be using daylight savings
当我试图添加到我的约会月份时,它正在跳过11月。 我相信这是因为十一月的夏令时。
这是代码,表明它比我想要的更进一天:
1 2 | var my_date = new Date(1377993599000); console.log(my_date.toUTCString()); |
输出"星期六,2013年8月31日23:59:59 GMT"
1 2 | my_date.setUTCMonth(my_date.getUTCMonth() + 3); console.log(my_date.toUTCString()); |
这输出"太阳报,2013年12月1日23:59:59 GMT"
现在,当我尝试只添加2:
1 2 | my_date.setUTCMonth(my_date.getUTCMonth() + 2); console.log(my_date.toUTCString()); |
这输出"星期四,2013年10月31日23:59:59 GMT"
当我尝试将日期设置为零时:
1 2 | my_date.setUTCMonth(my_date.getUTCMonth() + 3, 0); console.log(my_date.toUTCString()); |
这输出"星期四,2013年10月31日23:59:59 GMT"
有谁知道解决这个问题的干净方法?
我是否最好放弃UTC功能并简单地从所有时间中删除时区偏移量? 如果我这样做,它会解决我的问题吗?
11月31日没有,所以当你在这几个月加3时,它别无选择,只能滚到下个月,即12月1日。
几个月可靠地前进的问题是棘手的。 在执行此操作之前,您可以将日期(
Pointy的答案是正确的,这是一个允许不平衡月份的功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* Given a date object, add months (may be +ve or -ve) ** Allow for uneven length months, e.g. ** ** 30 Jan 2013 + 1 month => 30 Feb => 2 Mar ** ** so make 28 Feb. Also works for subtraction **/ function addMonths(date, months){ // Copy date, avoid IE bug for early dates var d = new Date(date.getTime()); months = Number(months); d.setMonth(d.getMonth() + months); var check = d.getMonth() - date.getMonth() + months; // If rolled over to next month, go to last day of previous month if (check) { d.setDate(0); } return d; } |