как изменить дату +7 дней в поле ввода с javascript [дубликат]

Очень простой подход, не зависящий от версии python, отсутствовал в уже заданных ответах, которые вы можете использовать большую часть времени (по крайней мере, я):

new_list = my_list * 1       #Solution 1 when you are not using nested lists

Однако, если my_list содержит другие контейнеры ( например, вложенных списков), вы должны использовать функцию глубокой печати, как другие, предложенные в ответах выше, из библиотеки копий. Например:

import copy
new_list = copy.deepcopy(my_list)   #Solution 2 when you are using nested lists

.Bonus: Если вы не хотите копировать элементы, используйте (ака мелкой копии):

new_list = my_list[:]

Давайте понимать разницу между решением # 1 и Solution # 2

>>> a = range(5)
>>> b = a*1
>>> a,b
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
>>> a[2] = 55 
>>> a,b
([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])

Как вы можете видеть, решение № 1 отлично работало, когда мы не использовали вложенные списки. Давайте проверим, что произойдет, когда мы применим решение №1 к вложенным спискам.

>>> from copy import deepcopy
>>> a = [range(i,i+4) for i in range(3)]
>>> a
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
>>> b = a*1
>>> c = deepcopy(a)
>>> for i in (a, b, c): print i   
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]
>>> a[2].append('99')
>>> for i in (a, b, c): print i   
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5, 99]]
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5, 99]]   #Solution#1 didn't work in nested list
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]]       #Solution #2 - DeepCopy worked in nested list
296
задан Jigar Joshi 10 September 2014 в 20:26
поделиться

14 ответов

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

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

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

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

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

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 или № 3 в списке.)

2. Использование MomentJS :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(Остерегайтесь того, что add изменяет экземпляр, который вы вызываете его, вместо того, чтобы возвращать новый экземпляр, поэтому today.add(1, 'days') изменит today . Поэтому мы начинаем с клонирования op на var tomorrow = ....)

3. Используя DateJS , но он не обновлялся в течение длительного времени:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
528
ответ дан T.J. Crowder 21 August 2018 в 04:19
поделиться
  • 1
    Но у меня есть дата 2010-09-11 в переменной, используя значение document.getElementById (& quot; arrival_date & quot;). Оно показывает недопустимую дату – Santanu 9 September 2010 в 08:37
  • 2
    @santanu: Это совершенно другая проблема: синтаксический анализ даты (получение даты путем интерпретации строки). Если этот формат является статическим, вы можете его самостоятельно проанализировать и передать результаты в конструктор Date (new Date(year, month, date)); см. раздел 15.9.2.1 спецификации ; если вы хотите принять диапазон форматов, обязательно посмотрите на DateJS . – T.J. Crowder 9 September 2010 в 09:12
  • 3
    @santanu: просто для ознакомления с вышеизложенным: некоторые браузеры могут успешно проанализировать этот формат с помощью Date.parse (который возвращает несколько миллисекунд, которые вы затем можете передать в new Date(ms)). Но будьте осторожны, это может варьироваться от браузера к браузеру. До недавнего времени реализации могли делать практически все, что они хотели в Date.parse. Новая спецификация пятого издания теперь имеет минимальный формат, который должен быть принят, но пока я не рассчитывал на это. – T.J. Crowder 9 September 2010 в 09:18
  • 4
    Я просто хотел добавить секунду к экземпляру Date; это сработало для меня x = new Date(); x2 = new Date(x.getTime() + 1000), где 1000 - миллисекундный приращение. – berto 5 December 2014 в 20:42
  • 5
    @piavgh: В первом решении нет ничего плохого, именно так вы его используете. Date объекты изменяемы. Вы сохраняете тот же самый Date объект три раза в массиве. Если вам нужны три разных объекта Date, вам необходимо создать три объекта: var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); } – T.J. Crowder 12 May 2017 в 06:54

Не полностью уверен, что это 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
0
ответ дан Alan Weiss 21 August 2018 в 04:19
поделиться

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

var tomorrow = new Date(today.getTime()+1000*60*60*24);
16
ответ дан approxiblue 21 August 2018 в 04:19
поделиться
  • 1
    Мне нравится это одно целое правило представления. – exebook 24 February 2017 в 11:55
  • 2
    Это лучший ответ. Может увеличивать / уменьшать простоты, как было запрошено; просто умножая 1000*60*60*24 x DaysToBeAdded – Khalil Khalaf 12 July 2017 в 16:00

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

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 .

10
ответ дан einarmagnus 21 August 2018 в 04:19
поделиться

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

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

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

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

1
ответ дан Gideon Shils 21 August 2018 в 04:19
поделиться

Результаты строкового представления даты завтрашнего дня. Используйте новую дату (), чтобы получить сегодняшнюю дату, добавив один день с помощью 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();
0
ответ дан Gor Davtyan 21 August 2018 в 04:19
поделиться
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
131
ответ дан Jigar Joshi 21 August 2018 в 04:19
поделиться
  • 1
    Но у меня есть дата 2010-09-11 в переменной, используя значение document.getElementById (& quot; arrival_date & quot;). Оно показывает недопустимую дату – Santanu 9 September 2010 в 08:35
  • 2
    @sanatu: В этом случае вам нужно отформатировать строку таким образом, чтобы браузер принимал. Chrome принимает new Date("2009-09-11"), но Firefox этого не делает. Я думаю, что большинство браузеров принимают new Date("2009/09/11"), поэтому простым решением будет var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);. – David Hedlund 9 September 2010 в 08:43
  • 3
    Более надежный подход, чем замена - на / и наделение того, что браузеры его воспримут, состоял бы в том, чтобы разделить строку на части: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1); Обратите внимание, что здесь мы используем m-1, поскольку месяцы javascript - значения перечисления (Январь - 0, а не 1) и d+1, потому что мы делаем инкремент уже в первоначальном назначении (он будет автоматически исправлен 29 февраля и т. Д.). – David Hedlund 9 September 2010 в 08:50

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

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

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

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
7
ответ дан jpmottin 21 August 2018 в 04:19
поделиться

Ни один из примеров в этом ответе, похоже, не работает с днями перехода на летнее время. В эти дни количество часов в день не равно 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());
28
ответ дан Marko Bonaci 21 August 2018 в 04:19
поделиться

Получить строковое значение даты, используя метод 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);
1
ответ дан phil 21 August 2018 в 04:19
поделиться
 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
-1
ответ дан swirekx 21 August 2018 в 04:19
поделиться

Получение следующих 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)
}
0
ответ дан tiny sunlight 21 August 2018 в 04:19
поделиться

Два метода:

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)
2
ответ дан Winter 21 August 2018 в 04:19
поделиться
-1
ответ дан Kiran Debnath 31 October 2018 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: