ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Вычисляем дату на X дней назад в JavaScript: простой способ

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для уменьшения количества дней в дате в JavaScript создайте объект Date и используйте метода setDate(), вычитая требуемое количество дней:

JS
Скопировать код
let date = new Date();  // Настраиваем машину времени
date.setDate(date.getDate() – 5); // И отправляемся на 5 дней в прошлое

Эта операция обновит объект Date, мутируя его внутреннее значение, что повлияет на всё содержимое объекта Date.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Разбираемся с основами

Автоматическая коррекция дат в setDate()

Метод setDate() автоматически учитывает переходы между месяцами и годами:

JS
Скопировать код
let date = new Date(2020, 0, 1); // Стартуем с 2020 года
date.setDate(date.getDate() – 365); // Быстро перебрасываемся в 2019 год!

Вау, это просто путешествие вокруг света!

Учет часовых поясов и перехода на летнее время

Часовые пояса и переход на летнее время (DST) могут добавить трудностей при работе с датами, иногда потребуется коррекция:

JS
Скопировать код
let date = new Date(); 
const initialOffset = date.getTimezoneOffset(); // "Контроль, мы отклонились от курса!"
date.setDate(date.getDate() – 5);
const newOffset = date.getTimezoneOffset(); // Фиксируем новое отклонение
if (initialOffset !== newOffset) {
  // Происходит переход на летнее время
}

Манипуляции с миллисекундами для повышения точности

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

JS
Скопировать код
let myDate = new Date(); 
myDate.setTime(myDate.getTime() – (5 * 24 * 60 * 60 * 1000)); // Возвращаемся на 5 дней в прошлое!

Запомните: день равен 24 60 60 * 1000 миллисекундам.

Продвинутые приёмы тайм-менеджмента

Создание функции для повторного использования

Рассмотрите функцию addOrSubtractDays, которая позволяет удобно манипулировать датами:

JS
Скопировать код
function addOrSubtractDays(date, days, add = true) {
  const dayMs = 24 * 60 * 60 * 1000;
  const newTime = date.getTime() + (days * dayMs * (add ? 1 : -1));
  return new Date(newTime);
}

Теперь вы можете либо увеличивать, либо уменьшать количество дней, сохраняя целостность временной шкалы!

Библиотеки для облегчения работы с датами

Используйте популярные библиотеки JavaScript, такие как DateJS, date-fns или Moment.js:

JS
Скопировать код
var moment = require('moment');
let momentDate = moment(date);
momentDate.subtract(5, 'days'); // И вот мы снова пять дней назад!

Эти библиотеки облегчат работу с датами и помогут избежать проблем с переходом на летнее время и переключением часовых поясов.

Визуализация

Представьте себя путешественником во времени, который быстро перелистывает календарные страницы:

JS
Скопировать код
const timeTraveler = (startDate, daysToSubtract) => {
  startDate.setDate(startDate.getDate() – daysToSubtract);
  return startDate;
};

И мы отправляемся в путешествие сквозь время:

Markdown
Скопировать код
Дата отправления: 🚀➡️  [10 мая]
Длительность путешествия: ⏱️ 3 дня

Прибыли в прошлое:

Markdown
Скопировать код
Дата прибытия: ⏳➡️  [7 мая]

Поздравляем, Док! Вы успешно вернулись в прошлое с помощью объекта Date — и вам не понадобился дорогой Делориан!

Обратите внимание на краевые случаи

Не забудьте обработать особые ситуации:

  • Переход через месяц или год? Отслеживайте високосные годы.
  • Избегайте дат до Unix-эпохи (1 января 1970 года), если только у вас нет светового меча.
  • Пересекаете границы DST? Убедитесь, что дата осталась корректной вне зависимости от перехода на летнее время.

Улучшайте визуализацию дат

Представьте даты в формате, удобном для ваших пользователей:

JS
Скопировать код
let date = new Date();
date.setDate(date.getDate() – 5);
console.log(date.toLocaleString());
// Выводится "5 дней назад, Мир все еще здесь"

Используйте toLocaleDateString() для более гибкой настройки форматов.

Полезные материалы

  1. Date.prototype.setDate() – JavaScript | MDN — Изучите более подробно метод setDate().
  2. Справочник по датам в JavaScript — Откройте для себя возможности JavaScript для работы с датами.
  3. date-fns – Современная JavaScript библиотека для работы с датами — Экономьте свое время с функцией subDays из date-fns.
  4. Moment.js | Документация — Узнайте, как управлять временем с помощью Moment.js.
  5. JavaScript: Разница между двумя датами в днях – w3resource — Улучшайте свои навыки работы с датами в JavaScript.
  6. Дата и время — Ваш путеводитель по миру работы с датами и временем в JavaScript.
  7. javascript – Как проверить применение летнего времени (DST) и его смещение? – Stack Overflow — Будьте в гуще событий: переход на летнее время и смена часовых поясов.