我需要在JavaScript中增加一天的日期值。

例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在一个JavaScript变量中。

如何将日期增加一天?


当前回答

使用这个函数,它解决了我的问题:

    let nextDate = (daysAhead:number) => {
      const today = new Date().toLocaleDateString().split('/')
      const invalidDate = new Date(`${today[2]}/${today[1]}/${Number(today[0])+daysAhead}`)
      if(Number(today[1]) === Number(12)){
        return new Date(`${Number(today[2])+1}/${1}/${1}`)
      }
      if(String(invalidDate) === 'Invalid Date'){
        return new Date(`${today[2]}/${Number(today[1])+1}/${1}`)
      }
        return new Date(`${today[2]}/${Number(today[1])}/${Number(today[0])+daysAhead}`)
    }

其他回答

在遵循其他人的建议之前,你首先需要解析你的字符串:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

如果你想让它恢复到相同的格式,你必须“手动”完成:

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

但我建议像其他回复中提到的那样获得Date.js,这将对你有很大帮助。

JavaScript日期的时区/夏令时感知日期增量:

function nextDay(date) {
    const sign = v => (v < 0 ? -1 : +1);
    const result = new Date(date.getTime());
    result.setDate(result.getDate() + 1);
    const offset = result.getTimezoneOffset();
    return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}

通过原生JS,添加一天你可以做以下事情:

let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow

另一种选择是使用矩库:

const date = moment().add(14, "days").toDate()

这个答案中的任何一个例子似乎都不适用于日光节约时间调整日。在这些日子里,一天的小时数不是24小时(是23小时还是25小时,取决于你是“向前跳”还是“向后跳”)。

下面的AddDays javascript函数说明了夏令时:

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

以下是我用来测试该功能的测试:

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

结果是表示明天日期的字符串。使用new Date()获取今天的日期,使用Date. getdate()和Date. setdate()添加一天,并将Date对象转换为字符串。

  const tomorrow = () => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
    };
    tomorrow();