Відповіді:
Ви можете створити його за допомогою: -
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
Це турбується про автоматичне збільшення місяця, якщо це необхідно. Наприклад:
8/31 + 1 день стане 9/1 .
Проблема з використанням setDate
безпосередньо полягає в тому, що це мутатор, і подібних речей найкраще уникати. ECMA вважає, що підходить розглядати Date
як клас, що змінюється, а не незмінна структура.
864E5
чомусь я вважаю за краще писати 24*60*60
у своєму коді :)
Правильна відповідь :
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Неправильний відповідь :
Ця відповідь іноді дає правильний результат, але дуже часто повертає неправильний рік та місяць. Єдиний раз, коли ця відповідь спрацьовує, коли дата, коли ви додаєте дні, має бути поточним роком та місяцем.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Доказ / приклад
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Будьте уважні, адже це може бути хитро. Якщо встановити "завтра", воно працює лише тому, що поточне значення відповідає році та місяцю "сьогодні". Однак встановлення номера дати, як-от "32", як правило, все одно буде добре, щоб перенести його на наступний місяць.
var d = new Date(); d.setDate( d.getDate() + 1 );
:?
getDate()
повертається день цього року . Потім виклик setDate
встановлює день у поточному році . Тож це НЕ хороше загальне рішення. @ Відповідь AnthonyWJones насправді працює правильно.
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
дає 3 січня 2017 року, який перетинає 2 роки.
Моє просте рішення:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
це рішення не має проблем із переходом на літній час. Також можна додати / змінити будь-яке зміщення за роки, місяці, дні тощо.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
правильний код.
setDate
.
Ці відповіді мені здаються заплутаними, я вважаю за краще:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () дає нам мілісекунди з 1970 року, а 86400000 - це кількість мілісекунд в день. Отже, мс містить мілісекунди на бажану дату.
Використання мілісекундного конструктора дає потрібний об’єкт дати.
new Date(new Date('11/4/2012').getTime() + 86400000)
Спробуйте
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Використовуючи setDate () для додавання дати, щоб вирішити вашу проблему, спробуйте додати кілька днів до місяця лютого, якщо ви спробуєте додати до нього нові дні, це не призведе до того, що ви очікували.
setDate()
? Є чи це так: stackoverflow.com/questions/5497637 / ...
Щойно витратили віки, намагаючись розібратися, що було угоди з роком, не додаючи при дотриманні головних прикладів нижче.
Якщо ви хочете просто додати n днів до вашої дати, найкраще просто:
myDate.setDate (myDate.getDate () + n);
або давношвидкий варіант
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Цей матеріал сьогодні / завтра бентежить. Встановивши поточну дату в нову змінну дати, ви зіпсуєте значення року. якщо ви працюєте з початкової дати, ви не будете.
Якщо можете, використовуйте moment.js . У JavaScript не дуже хороші методи рідної дати та часу. Далі наведено приклад синтаксису Моменту:
var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
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);
Я створив ці розширення минулої ночі:
ви можете передавати або позитивні, або негативні значення;
приклад:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
Не використовуючи другу змінну, ви можете замінити 7 на наступні x дні:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
до субстративної використання 30 днів (24h = 86400000ms)
new Date(+yourDate - 30 *86400000)
Найпростіше рішення.
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
Дякую Джейсону за вашу відповідь, яка працює, як очікувалося, ось суміш з вашого коду та зручного формату AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Пізно на вечірку, але якщо ви користуєтеся, тут є чудовий плагін під назвою Moment:jQuery
то
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
І багато інших хороших речей там!
Редагувати: посилання jQuery видалено завдяки коментарю aikeru
Рішення, призначене для оператора трубопроводу :
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
Використання:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
Якщо вам потрібна додаткова функціональність, пропоную заглянути в бібліотеку дат-фнів .
Старий я знаю, але іноді мені подобається таке:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
У мене виникли проблеми із літнім режимом часу із запропонованим рішенням.
Використовуючи getUTCDate
/ setUTCDate
замість цього, я вирішив свою проблему.
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
Ви можете використовувати JavaScript, не потрібен jQuery:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
Загальний прототип без змінних, він застосовується до існуючого значення Date:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
Документи mozilla для setDate () не вказують на те, що він буде обробляти сценарії наприкінці місяця. Дивіться https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
setDate ()
Ось чому я використовую setTime (), коли мені потрібно додати дні.
Настільки ж просто:
new Date((new Date()).getTime() + (60*60*24*1000));
Напевно, я також дам відповідь:
Особисто мені подобається намагатися уникати безперешкодного оголошення змінної, викликів методів та викликів конструктора, оскільки всі вони дорогі по продуктивності. (Звичайно, з розуму)
Я збирався залишити це як просто коментар у відповіді, наданій @AnthonyWJones, але подумав про це краще.
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
Вищезазначене буде поважати DST. Значить, якщо ви додасте кількість днів, що перетинають DST, відображений час (година) зміниться, щоб відобразити це.
Приклад:
2 листопада 2014 р. 02:00 закінчився DST.
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
Якщо ви хочете затримати час через DST (тому 10:30 все одно буде 10:30) ...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
Отже, тепер у вас є ...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
Ні, у JavaScript немає вбудованої функції, але ви можете використовувати простий рядок коду
timeObject.setDate(timeObject.getDate() + countOfDays);
Я використовую щось на кшталт:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Працює з економією часу:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Працює з новим роком:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Його можна параметризувати:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
Я використовую таке рішення.
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
Date має конструктор, який приймає int. Цей аргумент представляє загальні мілісекунди до / після 1 січня 1970 року. Він також має метод setTime, який робить те ж саме, не створюючи нового об'єкта Дата.
Що ми робимо тут, це перетворити дні в мілісекунди і додати це значення до значення, яке надає getTime. Нарешті, ми даємо результат конструктору Date (мілісекунд) або методу setTime (мілісекунд).
now.setDate(now.getDate() + days);
автоматично обробляє зміни DST. І я повинен виправити, високосні секунди ігноруються в часових мітках JS.
Редагувати:
Замість setTime()
(або setHours()
) ви можете це зробити так:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Старий:
Замість використання setTime()
ви можете використовувати setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Дивіться JSFiddle ...
d.setDate(d.getDate() + 1);
Дуже простий код для додавання днів у Java-скрипт.
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
Існують метод setDate та getDate , які дозволяють зробити щось подібне:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Якщо ви хочете відняти кількість днів і відформатувати дату у читаному для людини форматі, вам слід розглянути можливість створення спеціального DateHelper
об'єкта, який виглядає приблизно так:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(див. також цей Fiddle )
Розширення прототипу в JavaScript може бути не дуже хорошою ідеєю , особливо в професійних кодових базах.
Що ви хочете зробити, це розширити рідний Date
клас:
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
Таким чином, якщо одного дня Javascript реалізує нативний addDays
метод, ви нічого не порушите.
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};