2012-04-03 2 views
39

ЯКак добавить 1 день к текущей дате?

var ds = stringFormat("{day} {date} {month} {year}", { 
       day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
       date: date.getUTCDate(), 
       month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
       year: date.getUTCFullYear() 
}); 

Как добавить 1 день в него?

Я добавил +1 к getUTCDay() и getUTCDATE(), но «воскресенье» не отображает его.

+1

Что вы имеете в виду под "добавить +1"? Вам нужен следующий день или что-то еще? –

+0

Да, добавьте на следующий день к нему. – franticfrantic

+0

Есть ли дата: (date.getUTCDate() + 1) 'не работает (работает для меня)? Возможно, существует конфликт имен с 'date' (как Date() - Object _and_ как Object-Key. Вы пытались вызвать Date() - Object different? –

ответ

114

Чтобы добавить один день к объекту дата:

var date = new Date(); 

// add a day 
date.setDate(date.getDate() + 1); 
+0

См. дублированный вопрос : http://stackoverflow.com/questions/3674539/javascript-date-increment-question.Этот ответ хорош, но не учитывает DST. Есть 2 дня в году, у которых нет 24 часов. – Jess

+2

@ Джесс - это зависит от того, как вы хотите, чтобы изменения в представлении DST были представлены. Вопрос задал вопрос о том, как добавить его к дате, это именно то, что делает вышеупомянутый ответ. Добавление 24 часов не обязательно увеличивает эту дату, добавив ее к локальной дате, используя [* setDate *] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.36). – RobG

+0

Вот что я имею в виду. Приращение 10 марта: 'var a = новая дата (" 2013-03-10T00: 00: 00.000Z ");' 'a.setDate (a.getDate() + 1);' 'a.toISOString();' is ' "2013-03-10T23: 00: 00.000Z"'. Это тонкий случай, когда вышеуказанная функция не работала для меня. – Jess

21

По моему скромному мнению, лучший способ это просто добавить полный рабочий день в миллисекундах, в зависимости от того, как фактор кода это может испортить, если ваш в последний день месяца.

, например, 28 фев или марше 31.

Вот пример того, как я хотел бы сделать это:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567 
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms 
followingDay.toLocaleDateString(); 

имо это обеспечивает точность

вот другой пример я не люблю которые могут работать для вас, но не так чисты, что доза выше

var today = new Date('12/31/2015'); 
var tomorrow = new Date(today); 
tomorrow.setDate(today.getDate()+1); 
tomorrow.toLocaleDateString(); 

imho это === 'POOP'

Итак, у некоторых из вас были проблемы с моим миллисекундным подходом из-за дневного сбережения времени. Так что я собираюсь это исправить. Во-первых, некоторые страны и государства не имеют дневного светового времени. Второе Добавление ровно 24 часа - полный день. Если дата число доза не меняется один раз в год, но затем фиксируется через 6 месяцев, я не вижу проблемы там. Но для того, чтобы быть определенным и иметь дело с распределением злой даты(), я подумал об этом и теперь полностью ненавижу Дату. Так что это мой новый подход.

var dd = new Date(); // or any date and time you care about 
var dateArray = dd.toISOString().split('T')[0].split('-').concat(dd.toISOString().split('T')[1].split(':')); 
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

Теперь для забавной части!

var date = { 
    day: dateArray[2], 
    month: dateArray[1], 
    year: dateArray[0], 
    hour: dateArray[3], 
    minutes: dateArray[4], 
    seconds:dateArray[5].split('.')[0], 
    milliseconds: dateArray[5].split('.')[1].replace('Z','') 
} 

теперь у нас есть наш официальный Действительный международный дата Объект, четко обозначенный на меридиане Зулу. Теперь, чтобы изменить дату

dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward 
    tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it. 
+0

Добавление секунд/миллисекунд не будет работать для экономии дневного света. –

+0

@Matt H, откуда вы взяли эту идею. Время установлено в UTC в миллисекундах начиная с 1970/01/01 –

+1

Это будет следующий день в UTC, да, но не обязательно по местному времени. В день весны в США, 25 часов в день. Так что если у вас есть, например, 3/31/15 в 00:00 часов и добавить 86400000 миллисекунд, в день Sprint Forward, местное время будет 3/31/15 в 23:00, так как в этот день 25 часов. –

4
int days = 1; 
var newDate = new Date(Date.now() + days*24*60*60*1000); 

CodePen

var days = 2; 
 
var newDate = new Date(Date.now()+days*24*60*60*1000); 
 

 
document.write('Today: <em>'); 
 
document.write(new Date()); 
 
document.write('</em><br/> New: <strong>'); 
 
document.write(newDate);

+0

Добавление одного дня миллисекунды не работает, потому что не все дни 24 часа в местах, где наблюдается летнее время. Например. Чили заканчивает летнее время в полночь в начале 14 мая 2017 года. Часы будут отходить с полуночи до 23:00. Таким образом, добавление 24 часа до 2017-05-13 00:00:00 будет производить 2017-05-13 23:00:00, и дата не изменится (некоторые браузеры сделают это ровно в полночь, другие - через миллисекунду после) , :-( – RobG

Смежные вопросы