Добавьте один день в javascript
Я уверен, что многие люди задавали этот вопрос, но когда я проверял ответы, мне кажется, что они ошибаются, что то, что я нашел
var startDate = new Date(Date.parse(startdate));
//The start date is right lets say it is 'Mon Jun 30 2014 00:00:00'
var endDate = new Date(startDate.getDate() + 1);
// the enddate in the console will be 'Wed Dec 31 1969 18:00:00' and that wrong it should be 1 july
Я знаю, что .getDate()
возвращается с 1-31, но увеличивает ли браузер или javascript только день без обновления месяца и года?
и в этом случае Должен ли я написать алгоритм для обработки этого? или есть другой способ?
Ответы
Ответ 1
Обратите внимание, что Date.getDate
возвращает только день месяца. Вы можете добавить день, вызвав Date.setDate
и добавив 1.
// Create new Date instance
var date = new Date()
// Add a day
date.setDate(date.getDate() + 1)
JavaScript автоматически обновит месяц и год для вас.
EDIT:
Здесь ссылка на страницу, где вы можете найти все интересные вещи о встроенном объекте Date, и посмотреть, что возможно: Date.
Ответ 2
Конструктор Date
, который принимает одно число, ожидает число миллисекунд с 31 декабря 1969 года.
Date.getDate()
возвращает индекс дня для текущего объекта даты. В вашем примере день 30
. Окончательное выражение 31
, поэтому оно возвращает 31 миллисекунду после 31 декабря 1969 года.
Простым решением, использующим ваш существующий подход, является использование Date.getTime()
. Затем добавьте количество дней в миллисекундах вместо 1
.
Например,
var dateString = 'Mon Jun 30 2014 00:00:00';
var startDate = new Date(dateString);
// seconds * minutes * hours * milliseconds = 1 day
var day = 60 * 60 * 24 * 1000;
var endDate = new Date(startDate.getTime() + day);
JSFiddle
Обратите внимание, что это решение не обрабатывает граничные случаи, связанные с летней экономией, високосными годами и т.д. Вместо этого используется более эффективный с точки зрения затрат подход, используйте зрелую библиотеку с открытым исходным кодом, такую как moment.js, чтобы обрабатывать все.
Ответ 3
Я думаю, что вы ищете:
startDate.setDate(startDate.getDate() + 1);
Кроме того, вы можете посмотреть Moment.js
Библиотека дат javascript для синтаксического анализа, проверки, управления и форматирования.
Ответ 4
Есть вопрос 31 и 28 февраля с getDate()
Я использую эту функцию getTime
и 24*60*60*1000 = 86400000
var dateWith31 = new Date("2017-08-31");
var dateWith29 = new Date("2016-02-29");
var amountToIncreaseWith = 1; //Edit this number to required input
console.log(incrementDate(dateWith31,amountToIncreaseWith));
console.log(incrementDate(dateWith29,amountToIncreaseWith));
function incrementDate(dateInput,increment) {
var dateFormatTotime = new Date(dateInput);
var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
return increasedDate;
}
Ответ 5
var datatoday = new Date();
var datatodays = datatoday.setDate(new Date(datatoday).getDate() + 1);
todate = new Date(datatodays);
console.log(todate);
Это поможет вам...
Ответ 6
Если вы не против использовать библиотеку, DateJS (https://github.com/abritinthebay/datejs/) сделает это довольно легко. Вероятно, вам будет лучше с одним из ответов с использованием ванильного JavaScript, если вы не воспользуетесь некоторыми другими функциями DateJS, такими как синтаксический анализ необычно отформатированных дат.
Если вы используете DateJS, строка вроде этого должна сделать трюк:
Date.parse(startdate).add(1).days();
Вы также можете использовать MomentJS, который имеет похожие функции (http://momentjs.com/), однако я не так хорошо знаком с ним.
Ответ 7
используйте это, я думаю, это полезно для вас
var endDate=startDate.setDate(startDate.getDate() + 1);
Ответ 8
Просто для добавления функций в прототип Date
:
В изменчивом стиле/стиле:
Date.prototype.addDays = function(n) {
this.setDate(this.getDate() + n);
};
// Can call it tomorrow if you want
Date.prototype.nextDay = function() {
this.addDays(1);
};
Date.prototype.addMonths = function(n) {
this.setMonth(this.getMonth() + n);
};
Date.prototype.addYears = function(n) {
this.setFullYear(this.getFullYear() + n);
}
// etc...
var currentDate = new Date();
currentDate.nextDay();