Мені потрібно збільшити значення дати на один день у 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);
}