Увеличение даты в JavaScript

Мне нужно увеличить значение даты на один день в JavaScript.

Например, у меня есть значение даты 2010-09-11, и мне нужно сохранить дату следующего дня в переменной JavaScript.

Как я могу увеличить дату на день?

Ответ 1

Три варианта для вас:

1. Использование только объекта JavaScript Date (без библиотек):

Мой предыдущий ответ на вопрос № 1 был неверным (он добавил 24 часа, не учитывая переходы на летнее время и обратно; Clever Human указал, что он потерпит неудачу с 7 ноября 2010 года в восточном часовом поясе). Вместо этого ответ Jigar является правильным способом сделать это без библиотеки:

var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);

Это работает даже в последний день месяца (или года), потому что объект даты в JavaScript подходит для ролловера:

var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the 'snippet' object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

Ответ 2

var myDate = new Date();

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

Ответ 3

Ни один из примеров в этом ответе, похоже, не работает с днями перехода на летнее время. В те дни количество часов в сутки не равно 24 (они равны 23 или 25, в зависимости от того, если вы "прыгаете вперед" или "отступаете".)

В приведенных ниже функциях javascript AddDays учитывается переход на летнее время:

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());

Ответ 4

Самый простой способ - преобразовать в миллисекунды и добавить 1000 * 60 * 60 * 24 миллисекунды, например:

var tomorrow = new Date(today.getTime()+1000*60*60*24);

Ответ 5

Завтра в одной строке в чистом JS, но он уродливый!

new Date(new Date().setDate(new Date().getDate() + 1))

Вот результат:

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)

Ответ 6

Сначала вам нужно проанализировать свою строку, прежде чем следовать рекомендациям других людей:

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, как указано в других ответах, что поможет вам alot.

Ответ 7

Получение следующих 5 дней:

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}

Ответ 8

Два метода:

1

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2: Как и предыдущий метод

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)

Ответ 9

Получить строковое значение даты, используя метод dateObj.toJSON() Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Нарежьте дату из возвращаемого значения и затем увеличьте количество дней, которое вы хотите.

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);

Ответ 10

Не совсем уверен, что это BUG (протестированный Firefox 32.0.3 и Chrome 38.0.2125.101), но следующий код не будет работать в Бразилии (-3 GMT):

Date.prototype.shiftDays = function(days){    
  days = parseInt(days, 10);
  this.setDate(this.getDate() + days);
  return this;
}

$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");

Результат:

Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200

Добавление одного часа к дате сделает работу безупречной (но не решает проблему).

$date = new Date(2014, 9, 16,0,1,1);

Результат:

Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200

Ответ 11

Вы можете использовать этот открытый компонент который я написал также. Он также работает с другими временными интервалами (часы, минуты, недели, месяцы и т.д.) И учитывает летнее время. Вы можете просто использовать метод dateAdd() для добавления дней в один вызов.

Пример использования вашей даты:

var oldDate = new Date('September 11, 2010 00:00:00');
var newDate = dateAdd(oldDate, 5, 'days'); // => September 16, 2010 00:00:00

Я предпочитаю это, потому что он ванильный javascript и не требует полной библиотеки.

Ответ 12

 Date.prototype.AddDays = function (days) {
    days = parseInt(days, 10);
    return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}

Пример

var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));

Результат

2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z

Ответ 13

Результатом является строковое представление даты завтрашнего дня. Используйте 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();

Ответ 14

Через собственный JS, чтобы добавить один день, вы можете сделать следующее:

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

Другой вариант - использовать библиотеку moment :

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

Ответ 15

Инкремент года с ванилью JS:

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

На всякий случай, если кто-то хочет увеличить другое значение, кроме даты (дня)

Ответ 16

var now = new Date();
// 2019-01-31T00:00:08.784Z

var tomorrow = (new Date()).setDate(now.getDate() + 1);
// 2019-02-01T00:00:08.784Z