Вычтите дни из даты в JavaScript

В C ++ 11 соответствующий текст можно найти в 8.3.6. Аргументы по умолчанию / 9 (Emphasis mine)

По умолчанию аргументы оцениваются каждый раз функция вызывается. Порядок оценки аргументов функции не указан. Следовательно, параметры функции не должны использоваться в аргументе по умолчанию, даже если они не оцениваются.

То же словосочетание используется также стандартом C ++ 14, и оно найдено в тот же раздел .

509
задан John Slegers 15 April 2018 в 23:20
поделиться

12 ответов

Попробуйте что-то вроде этого:

 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 ());
854
ответ дан 22 November 2019 в 22:20
поделиться

var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 31);

document.write('<br>5 days ago was: ' + d.toLocaleString());
-1
ответ дан gatlingovind 15 April 2018 в 23:20
поделиться

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 );
0
ответ дан belal ahmad 15 April 2018 в 23:20
поделиться

Я нахожу проблему с методом 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 дней.

Вы можете легко экстраполировать это, чтобы создать единицы времени для месяцев, лет и т. Д.

7
ответ дан Jonathan Bechtel 15 April 2018 в 23:20
поделиться

Если вы хотите вычесть количество дней и отформатировать дату в удобочитаемом формате, вам следует рассмотреть возможность создания пользовательского объекта 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));

(см. Также эту скрипку )

1
ответ дан John Slegers 15 April 2018 в 23:20
поделиться

Лучшие ответы привели к ошибке в моем коде, когда в первом месяце он установил будущую дату в текущем месяце. Вот что я сделал,

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
1
ответ дан Kishore Avineni 15 April 2018 в 23:20
поделиться

Я играл вокруг и нашел легкое решение:

Использование .setDate(+daysCount|-daysCount); символ =|- является необходимостью;

let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);

today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
0
ответ дан 22 November 2019 в 22:20
поделиться

Если Вы хотите все это на одной строке вместо этого.

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));
0
ответ дан 22 November 2019 в 22:20
поделиться

разбивает дату на части, а затем возвращает новую дату с измененными значениями

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 года;

10
ответ дан 22 November 2019 в 22:20
поделиться
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);

Если вы выполняете много головокружительных манипуляций с датами в своем веб-приложении, DateJS значительно облегчит вашу жизнь:

http://simonwillison.net/ 2007 / Dec / 3 / datejs /

71
ответ дан 22 November 2019 в 22:20
поделиться

Это выглядит примерно так:

var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
48
ответ дан 22 November 2019 в 22:20
поделиться

Существуют так сверхсложные ответы, эта проблема может легко быть решена остротой, которая является комбинацией некоторых уже высоко оцененные ответы.

Просто вычитают 5 дней * 24 часа * 60 минут * 60 секунд * 1 000 миллисекунд с текущей даты и создают новую дату из того значения.

const fiveDaysAgo = new Date(new Date() - 5*24*60*60*1000)

-1
ответ дан 22 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: