设置UTC日期似乎是在使用夏令时

Setting UTC date seems to be using daylight savings

本文关键字:夏令时 似乎是 UTC 日期 设置      更新时间:2023-09-26

当我试图添加约会对象的月份时,它会跳过11月。我相信这是因为十一月的夏令时。

这是一个代码,表明它比我想要的更进一步:

var my_date = new Date(1377993599000);
console.log(my_date.toUTCString());

此输出"2013年8月31日星期六23:59:59 GMT"

my_date.setUTCMonth(my_date.getUTCMonth() + 3);
console.log(my_date.toUTCString());

此输出"2013年12月1日星期日23:59:59 GMT"

现在,当我尝试只添加2:时

my_date.setUTCMonth(my_date.getUTCMonth() + 2);
console.log(my_date.toUTCString());

输出"2013年10月31日星期四23:59:59 GMT"

当我试图将日期设置为零时:

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日。

可靠地向前推进几个月的问题很棘手。在执行此操作之前,您可以将月日(.setDate())设置为1,但随后您必须决定如何将其设置回与原始日期相关的日期。

Pointy的答案是正确的,这里有一个函数可以允许不均匀的月份:

/* 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;
}