В C ++ 11 соответствующий текст можно найти в 8.3.6. Аргументы по умолчанию / 9 (Emphasis mine)
По умолчанию аргументы оцениваются каждый раз функция вызывается. Порядок оценки аргументов функции не указан. Следовательно, параметры функции не должны использоваться в аргументе по умолчанию, даже если они не оцениваются.
То же словосочетание используется также стандартом C ++ 14, и оно найдено в тот же раздел .
Попробуйте что-то вроде этого:
var d = new Date();
d.setDate(d.getDate()-5);
Обратите внимание, что это изменяет объект даты и возвращает значение времени обновленной даты.
var d = new Date (); document.write ('Сегодня:' + d.toLocaleString ()); d.setDate (d.getDate () - 5); document.write ('
5 дней назад было:' + d.toLocaleString ());
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;
var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
Я нахожу проблему с методом getDate () / setDate () в том, что он слишком легко превращает все в миллисекунды, и мне иногда сложно следовать синтаксису.
Вместо этого мне нравится отрабатывать тот факт, что 1 день = 86 400 000 миллисекунд.
Итак, для вашего конкретного вопроса:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Работает как шарм.
Я все время использую этот метод для расчета 30/60/365 дней.
Вы можете легко экстраполировать это, чтобы создать единицы времени для месяцев, лет и т. Д.
Если вы хотите вычесть количество дней и отформатировать дату в удобочитаемом формате, вам следует рассмотреть возможность создания пользовательского объекта 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. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));
(см. Также эту скрипку )
Лучшие ответы привели к ошибке в моем коде, когда в первом месяце он установил будущую дату в текущем месяце. Вот что я сделал,
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
Я играл вокруг и нашел легкое решение:
Использование .setDate(+daysCount|-daysCount)
; символ =|-
является необходимостью;
let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);
today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
Если Вы хотите все это на одной строке вместо этого.
5 дней с сегодняшнего дня
//past
var thirtyDaysAgo = new Date(new Date().setDate(new Date().getDate() - 5));
//future
var thirtyDaysInTheFuture = new Date(new Date().setDate(new Date().getDate() + 5));
5 дней с определенной даты
var pastDate = new Date('2019-12-12T00:00:00');
//past
var thirtyDaysAgo = new Date(new Date().setDate(pastDate.getDate() - 5));
//future
var thirtyDaysInTheFuture = new Date(new Date().setDate(pastDate.getDate() + 5));
я записал функцию, которую можно использовать.
function AddOrSubractDays(startingDate, number, add) {
if (add) {
return new Date(new Date().setDate(startingDate.getDate() + number));
} else {
return new Date(new Date().setDate(startingDate.getDate() - number));
}
}
console.log('Today : ' + new Date());
console.log('Future : ' + AddOrSubractDays(new Date(), 5, true));
console.log('Past : ' + AddOrSubractDays(new Date(), 5, false));
разбивает дату на части, а затем возвращает новую дату с измененными значениями
function DateAdd(date, type, amount){
var y = date.getFullYear(),
m = date.getMonth(),
d = date.getDate();
if(type === 'y'){
y += amount;
};
if(type === 'm'){
m += amount;
};
if(type === 'd'){
d += amount;
};
return new Date(y, m, d);
}
Помните, что месяцы отсчитываются от нуля, а дни - нет. т.е. новая дата (2009, 1, 1) == 01 февраля 2009 года, новая дата (2009, 1, 0) == 31 января 2009 года;
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Если вы выполняете много головокружительных манипуляций с датами в своем веб-приложении, DateJS значительно облегчит вашу жизнь:
Это выглядит примерно так:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
Существуют так сверхсложные ответы, эта проблема может легко быть решена остротой, которая является комбинацией некоторых уже высоко оцененные ответы.
Просто вычитают 5 дней * 24 часа * 60 минут * 60 секунд * 1 000 миллисекунд с текущей даты и создают новую дату из того значения.
const fiveDaysAgo = new Date(new Date() - 5*24*60*60*1000)