Как вычесть дни из обычной даты?
Я столкнулся с проблемой при работе с объектом Date
в JavaScript и ищу простое решение. Есть ли легкий способ взять текущую дату (например, сегодня) и вернуться назад на X дней?
К примеру, мне нужно рассчитать дату за 5 дней до сегодняшнего дня. Как это можно реализовать?
5 ответ(ов)
Попробуйте сделать что-то подобное:
var d = new Date();
d.setDate(d.getDate() - 5);
Обратите внимание, что этот код изменяет объект даты и возвращает значение времени обновленной даты.
var d = new Date();
document.write('Сегодня: ' + d.toLocaleString());
d.setDate(d.getDate() - 5);
document.write('<br>5 дней назад было: ' + d.toLocaleString());
Этот фрагмент кода сначала создает объект даты с текущей датой и временем, а затем уменьшает число дней на 5, после чего выводит информацию на веб-странице.
Если вы выполняете множество сложных операций с датами в своем веб-приложении, использование библиотеки DateJS значительно упростит вашу жизнь:
var dateOffset = (24 * 60 * 60 * 1000) * 5; // 5 дней
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
С помощью DateJS вы сможете легко производить манипуляции с датами, не заботясь о сложных вычислениях и форматах. Вы можете ознакомиться с библиотекой по следующей ссылке: DateJS.
Ваш код на JavaScript выглядит следующим образом:
var d = new Date(); // сегодня!
var x = 5; // вернуться на 5 дней!
d.setDate(d.getDate() - x);
Этот код создает новый объект даты d
, который представляет собой текущую дату. Затем вы задаете переменную x
, которая содержит количество дней, на которое вы хотите вернуться. В последней строке вы используете метод setDate()
для изменения дня месяца в d
, вычитая из текущей даты значение x
. В результате переменная d
теперь будет содержать дату, которая на 5 дней меньше, чем сегодняшняя. Надеюсь, это поможет!
Если вы хотите получить результат в одну строку, вот как это можно сделать:
5 дней от сегодняшнего дня
// past
var fiveDaysAgo = new Date(new Date().setDate(new Date().getDate() - 5)); // 5 дней назад
// future
var fiveDaysInTheFuture = new Date(new Date().setDate(new Date().getDate() + 5)); // 5 дней вперед
5 дней от конкретной даты
var pastDate = new Date('2019-12-12T00:00:00'); // задаем конкретную дату
// past
var fiveDaysAgo = new Date(new Date().setDate(pastDate.getDate() - 5)); // 5 дней назад от конкретной даты
// future
var fiveDaysInTheFuture = new Date(new Date().setDate(pastDate.getDate() + 5)); // 5 дней вперед от конкретной даты
Функция для добавления или вычитания дней
function AddOrSubractDays(startingDate, number, add) {
return new Date(new Date().setDate(startingDate.getDate() + (add ? number : -number)));
}
console.log('Сегодня : ' + new Date()); // выводит текущую дату
console.log('Будущее : ' + AddOrSubractDays(new Date(), 5, true)); // выводит дату через 5 дней
console.log('Прошлое : ' + AddOrSubractDays(new Date(), 5, false)); // выводит дату 5 дней назад
Этот код создает функцию, которая принимает начальную дату, количество дней и флаг (добавлять или вычитать дни), что позволяет вам сократить код.
Проблема с использованием getDays
для вычисления дат, пересекающих границы дней и месяцев, заключается в том, что этот метод не учитывает корректно количество дней в месяце, что может привести к неправильным результатам. Тем не менее, использование getTime()
работает, если ваша дата находится после 1970 года, так как getTime()
возвращает количество миллисекунд с 1 января 1970 года.
Вот исправленный пример, который делает то же самое, но использует setDate()
для вычитания дней, что более корректно:
var todayDate = new Date();
var weekDate = new Date(todayDate); // Создаем копию сегодняшней даты
weekDate.setDate(todayDate.getDate() - 7); // Вычитаем 7 дней
Таким образом, setDate()
автоматически учтет все особенности перехода между месяцами и годами.
Как отформатировать дату в JavaScript?
Преобразование Unix-метки времени в формат времени в JavaScript
Где найти документацию по форматированию даты в JavaScript?
Форматирование даты в JavaScript в виде yyyy-mm-dd
Как преобразовать дату в UTC?