Получаем начало и конец дня в Javascript: учимся учётом GMT

Пройдите тест, узнайте какой профессии подходите

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

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

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

JS
Скопировать код
let sunUp = new Date();
sunUp.setHours(0, 0, 0, 0); // Начало дня.

let lightsOut = new Date();
lightsOut.setHours(23, 59, 59, 999); // Конец дня.

Переменная sunUp указывает на начало дня, а lightsOut – на его окончание.

Кинга Идем в IT: пошаговый план для смены профессии

Заботимся о временных зонах

Понимание временных зон играет важную роль при определении начала и окончания дня. Для работы со всемирным координированным временем (UTC), используйте следующий код:

JS
Скопировать код
let dawnUTC = new Date();
dawnUTC.setUTCHours(0, 0, 0, 0); // Начало дня по UTC.

let duskUTC = new Date();
duskUTC.setUTCHours(23, 59, 59, 999); // Конец дня по UTC.

Методы dawnUTC.toUTCString() и duskUTC.toUTCString() позволяют получить строковые представления времени в формате UTC.

Работа с библиотеками

Для более удобной работы с временными зонами и форматированием дат можно воспользоваться библиотеками:

  • dayjs позволяет просто работать с UTC: dayjs.utc().startOf('day') и dayjs.utc().endOf('day').
  • Luxon's DateTime облегчает получение строк в формате ISO: .local().startOf('day').toUTC().toISO() и .local().endOf('day').toUTC().toISO().

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

Остерегайтесь потенциальных ловушек

Разработка программного обеспечения полна неожиданностей. Например:

  • Переход на летнее время может влиять на расчёт начала и конца дня.
  • Високосные секунды, хотя и редки, могут влиять на вычисления, поэтому устанавливаем конец дня в 23:59:59.999.
  • Когда вы взаимодействуете с пользователем, обработка временных данных должна быть особенно точной.

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

Сравним понятие времени с книжным шкафом, где каждый том — это отдельный день:

Markdown
Скопировать код
Книжный шкаф:
[🌞-1 янв, 🌞-2 янв, 🌞-3 янв, ..., 🌞-31 дек]

Каждый том имеет свое начало (рассвет) и конец (закат):

JS
Скопировать код
const today = new Date(); // 🌞-Том на сегодняшний день

Открываем том на начало дня:

JS
Скопировать код
today.setHours(0, 0, 0, 0); // Рассвет: первая страница

Закрываем том на конец дня:

JS
Скопировать код
today.setHours(23, 59, 59, 999); // Закат: последняя страница

Получаем:

Markdown
Скопировать код
Начало дня: 📖 Первая страница тома
Конец дня: 📚 Последняя страница тома

Каждый день — это история от рассвета до заката.

Форматирование дат

За форматирование дат, у вас будут следующие методы:

  • new Date().toISOString() для получения строки в формате ISO.
  • Чтобы представить местное время в виде UTC, разделите строку по 'GMT' и добавьте 'UTC': new Date().toString().split('GMT')[0] + ' UTC'.
  • Всегда проверяйте результаты и их форматирование, отслеживайте развертывание вашего кода, особенно при работе с форматированием дат.

Советы по выбору библиотек

Перед тем, как обращаться к внешним библиотекам, оцените все плюсы и минусы. Возможно, стандартный объект Date в JavaScript вполне справится с вашими задачами. Однако, если вам нужно решить сложные задачи, рассмотрите использование библиотек, как Dayjs и Luxon, которые предлагают удобный синтаксис и управление временными зонами. date-fns также предлагает решения для специализированных задач, например startOfDay. Изучите их документацию, чтобы следовать последним обновлениям и лучшим практикам.

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

  1. Date – JavaScript | MDN — полезная информация про объект Date в JavaScript.
  2. How do I get a timestamp in JavaScript? – Stack Overflow — обсуждение о возможностях получения временных меток в JavaScript.
  3. JavaScript Date Reference — удобный справочник по Date объекту на W3Schools.
  4. How to initialize a JavaScript Date to a particular time zone – Stack Overflow — дискуссия о работе с временными зонами.
  5. Everything You Need to Know About Date in JavaScript | CSS-Tricks — обзор основных и продвинутых аспектов работы с датами в JavaScript.
  6. Moment.js | Docs — прекрасное место для начала изучения парсинга, валидации и форматирования дат.
  7. date-fns – удобная для работы с датами библиотека для JavaScript — документация по функции startOfDay библиотеки date-fns как альтернативе Moment.js.
Свежие материалы