☕ Учебник по JavaScript: работа с датой и временем
Разбираемся в стандартных функциях для работы с датой и временем в JavaScript, пробуем разные манипуляции и форматы вывода, а также знакомимся с библиотекой Day.js.
Создание даты
Для получения даты используется объект Date
. Существует четыре способа создания объекта даты и времени:
new Date()
– создание объекта с текущей датой и временем без указания параметров.
new Date(value)
– с передачей параметраvalue,
который показывает количество миллисекунд, прошедших с 1 января 1970 г. GMT+0.
new Date(string)
– параметрstring
содержит дату в формате строки. Передаваемая строка должна соответствовать стандартным форматам ISO 8601 или RFC 2822. Подробнее о формате ISO 8601 на странице (вики) и о RFC 2822 на странице (англ.).
new Date(year, month, day, hour, minutes, seconds)
– создание объекта с набором необязательных параметров:year
– целое четырехзначное число,month
– число от нуля (январь) до одиннадцати (декабрь),day
,hour
,minutes
,seconds
– целые числа.
В JS поддерживается проверка ввода дней, часов, минут, секунд и миллисекунд.
Получение отдельных компонентов даты и времени
Получение отдельных компонентов даты и времени возможно с помощью следующих методов:
getFullYear()
– получение четырехзначного значения года;getMonth()
– получение значения месяца от 0 (январь) до 11 (декабрь);getDate()
– получение числа дня в месяце;getHours()
– количество часов;getMinutes()
– количество минут;getDay()
– получение номера дня недели от нуля (воскресенье) до шести (суббота);getTime()
– получение количества миллисекунд, прошедших с 1 января 1970 г. UTC.
Установка отдельных компонентов даты и времени
Для установки отдельных компонентов используются методы:
setFullYear(year)
– для установки года, гдеyear
– четырехзначное число;setMonth(month)
– для установки месяца от 0 до 11;setDate(date)
– число месяца,date
– целое число;setHours(hours)
– часы, гдеhours
– целое число;setMinutes(minutes)
,setSeconds(seconds)
,setMilliseconds(milliseconds)
– для установки минут, секунд, миллисекунд, где параметрыminutes
,seconds
,milliseconds
– целые числа;setTime(milliseconds)
– устанавливает в соответствии с параметром миллисекундами –milliseconds
, прошедших с 1 января 1970 г. UTC.
Как получить из даты строку?
Чтобы получить из объекта даты строку, используются два типа методов.
Для даты в часовом поясе UTC:
toString()
– получение полной строки даты и времени;toDateString()
– строка только с указанием даты и дня недели;toTimeString()
– только время;toISOString()
– преобразование строки в формат ISO.
Перечисленные методы возвращают представление даты во временной зоне UTC:
Для получения даты локального часового пояса и языка:
toLocaleString(locales, options)
– дата и время в виде строки локали;toLocaleDateString(locales, options)
– строка только из даты;toLocaleTimeString(locales, options)
– получение только времени.
Методы возвращают значение даты с учетом локального часового пояса и языка. Параметры locales
, options
– необязательные.
Без указания параметров будет использован установленный часовой пояс и язык на компьютере. Подробнее об этих аргументах ниже – в разделе «Метод Intl.DateTimeFormat()».
Как получить из строки дату?
Метод Date.parse(string)
принимает на вход строку в формате RFC2822 или ISO, а возвращает количество миллисекунд, прошедших с 1 января 1970 г. UTC.
Примечание: неявный вызов метода parse()
используется в конструкторе с параметром строки: new Date(dateString)
.
Как указать временную зону?
Объекты даты изначально создаются во временной зоне UTC в качестве базовой. Поэтому, чтобы явно указать временную зону, объект Date
принимает в параметры строку с обозначением временного пояса.
Создание с добавлением +-hhmm
выглядит так: new Date('May 25, 2022 11:10:00 +03:00')
.
Как получить текущее время?
Для того чтобы получить текущую дату и время, используйте создание Date
с пустым конструктором: new Date()
;
Обратите внимание, что метод возвращает время в часовом поясе UTC.
Для получения даты в миллисекундах используется метод Date.now()
без создания объекта.
Как сравнить две даты?
Для сравнения используется метод приведения даты к миллисекундам – getTime()
:
Как альтернативный вариант, но не самый лучший – приведение двух дат к строкам с помощью методов получения строки и дальнейшее сравнение:
Примечание: будьте осторожны, отличие хоть на секунду вернет при сравнении false
.
Форматирование даты в соответствии с разными языками
Для вывода даты в соответствии с местным временем используются стандартные функции. Что делать, если необходима поддержка и другого формата? Объект Intl
– предоставляет функции сравнения строк в разных языковых форматах, форматирования чисел и дат со временем.
Метод Intl.DateTimeFormat() для вывода строк в разных языковых форматах
Создание объекта: new Intl.DateTimeFormat(locales, options)
, где:
locales
– необязательный параметр. Строка или массив из трех компонентов, которые содержит код языка, код способа записи и код страны. Например, указание может состоять:ru
– русский язык,en-GB
– английский язык- Англия (GB),en-US
– английский язык – СШАUS
. Больше языков приведено на сайте (англ.).options
– необязательный параметр. Объект дополнительных настроек. Содержит следующие поля:localeMatcher
– алгоритм сопоставления локалей, принимает значения:lookup
,best fit
– по умолчанию.timeZone
– указание часового пояса, значение по умолчанию – часовой пояс по умолчанию среды выполнения.hour12
– использование 12-часового формата времени, значения:true
,false
. По умолчанию устанавливается использование формата локального времени.formatMatcher
– алгоритм сопоставления форматов, значения:basic
,best fit
– по умолчанию.
Дальнейший перечень свойств, которые описывают компоненты даты и времени, используемые в форматированном выводе, и желаемые представления показаны на странице. Их использование необязательно.
Создание даты в локальном формате:
C использованием параметра locales
:
Использование библиотеки Day.js
Компактная библиотека JavaScript для работы с датой и временем. Day.js содержит функции разбора строки, валидации, преобразования форматов, разных видов манипуляций и сравнения двух дат.
Библиотека работает в современных браузерах, поэтому для работы достаточно вставить перед тегом </body>
:
Примеры работы с библиотекой:
- Создание объекта даты:
- Установка отдельных компонент даты и времени:
- Сравнение двух дат:
Полную документация по использованию библиотеки смотрите на официальном сайте библиотеки.