Мені потрібно збільшити значення дати на один день у JavaScript.
Наприклад, у мене є дата дати 2010-09-11, і мені потрібно зберігати дату наступного дня у змінній JavaScript.
Як я можу збільшити побачення за день?
Мені потрібно збільшити значення дати на один день у JavaScript.
Наприклад, у мене є дата дати 2010-09-11, і мені потрібно зберігати дату наступного дня у змінній JavaScript.
Як я можу збільшити побачення за день?
Відповіді:
Три варіанти для вас:
Dateоб’єкта JavaScript (без бібліотек):Моя попередня відповідь №1 була помилковою (вона додала 24 години, не враховуючи переходів до та з літнього часу; Клівер Люд зазначив, що це не вдасться 7 листопада 2010 року у східному часовому поясі). Натомість відповідь Джигара - це правильний спосіб зробити це без бібліотеки:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Це працює навіть останній день місяця (або року), оскільки об’єкт дати JavaScript розумний щодо перекидання:
(Ця відповідь наразі прийнята, тому я не можу її видалити. Перш ніж вона була прийнята, я запропонував ОП прийняти Джигар, але, можливо, вони прийняли цю для пунктів №2 або №3 у списку.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Остерігайтеся, що ви addмодифікуєте екземпляр, до якого ви викликаєте, а не повертайте новий екземпляр, так today.add(1, 'days')би змінили today. Ось чому ми починаємо з опції клонування var tomorrow = ....)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Dateконструктор ( new Date(year, month, date)); див. розділ 15.9.2.1 специфікації ; якщо ви хочете прийняти діапазон форматів, обов'язково подивіться на DateJS .
Date.parse(який повертає кількість мілісекунд, з якими ви зможете подати інформацію new Date(ms)). Але будьте обережні, це може відрізнятися від браузера до браузера. До недавнього часу впровадження могли робити майже все, що вони хотіли Date.parse. Нова специфікація 5-го видання тепер має мінімальний формат, який потрібно прийняти, але я би на це ще не розраховував.
x = new Date(); x2 = new Date(x.getTime() + 1000), де 1000 - це приріст мілісекунд.
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)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
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);.
-з /і в надії , що браузери будуть приймати його, було б розділити рядок на частини: 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 лютого тощо)
Жоден із прикладів цієї відповіді, здається, не працює з днями коригування літнього часу. У ці дні кількість годин у день не становить 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());
Найпростіший спосіб - перетворити в мілісекунди і додати 1000 * 60 * 60 * 24 мілісекунди, наприклад:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24хDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)але це насправді схоже на getTime()/ setTime(), насправді.
new Date(Date.now()+1000*60*60*24);
Спочатку потрібно проаналізувати рядок, перш ніж виконувати пропозиції інших людей:
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, як згадується в інших відповідях, що допоможе вам багато .
Я відчуваю , що ніщо не є більш безпечним , ніж .getTime()та .setTime(), таким чином , це повинно бути кращим, і продуктивним , а також.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate() для недійсної дати (наприклад, 31 + 1) занадто небезпечно, і це залежить від реалізації браузера.
Отримайте значення рядка дати за допомогою методу 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);
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
Не повністю впевнений, що це 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
Результати в рядковому поданні завтрашньої дати. Використовуйте новий 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();
За допомогою нативного JS, щоб додати один день, ви можете зробити наступне:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Іншим варіантом є використання momentбібліотеки:
const date = moment().add(14, "days").toDate()
Збільшення дат на часовий пояс / літній час для дат 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);
}