9

Как вычесть дни из обычной даты?

4

Я столкнулся с проблемой при работе с объектом Date в JavaScript и ищу простое решение. Есть ли легкий способ взять текущую дату (например, сегодня) и вернуться назад на X дней?

К примеру, мне нужно рассчитать дату за 5 дней до сегодняшнего дня. Как это можно реализовать?

5 ответ(ов)

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('<br>5 дней назад было: ' + d.toLocaleString());

Этот фрагмент кода сначала создает объект даты с текущей датой и временем, а затем уменьшает число дней на 5, после чего выводит информацию на веб-странице.

1

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

var dateOffset = (24 * 60 * 60 * 1000) * 5; // 5 дней
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);

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

0

Ваш код на JavaScript выглядит следующим образом:

var d = new Date(); // сегодня!
var x = 5; // вернуться на 5 дней!
d.setDate(d.getDate() - x);

Этот код создает новый объект даты d, который представляет собой текущую дату. Затем вы задаете переменную x, которая содержит количество дней, на которое вы хотите вернуться. В последней строке вы используете метод setDate() для изменения дня месяца в d, вычитая из текущей даты значение x. В результате переменная d теперь будет содержать дату, которая на 5 дней меньше, чем сегодняшняя. Надеюсь, это поможет!

0

Если вы хотите получить результат в одну строку, вот как это можно сделать:

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 дней назад

Этот код создает функцию, которая принимает начальную дату, количество дней и флаг (добавлять или вычитать дни), что позволяет вам сократить код.

0

Проблема с использованием getDays для вычисления дат, пересекающих границы дней и месяцев, заключается в том, что этот метод не учитывает корректно количество дней в месяце, что может привести к неправильным результатам. Тем не менее, использование getTime() работает, если ваша дата находится после 1970 года, так как getTime() возвращает количество миллисекунд с 1 января 1970 года.

Вот исправленный пример, который делает то же самое, но использует setDate() для вычитания дней, что более корректно:

var todayDate = new Date();
var weekDate = new Date(todayDate); // Создаем копию сегодняшней даты
weekDate.setDate(todayDate.getDate() - 7); // Вычитаем 7 дней

Таким образом, setDate() автоматически учтет все особенности перехода между месяцами и годами.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь