- Объект Date: Текущая Дата и Время в Javascript
- 1. Использовать конструктор new Date() без передачи дополнительных параметров
- 2. Использовать конструктор new Date() с передачей временной метки, выраженной в миллисекундах
- 3. Передать дату в объект Date — в формате строки
- 4. Передать набор параметров в объект Date
- Как Поменять Временную Зону?
- Объект Date: Форматирование
- Javascript: Текущая дата и время (все методы получения)
- Установка Компонентов Даты и Времени
- Как Получить Текущее Время из Объекта Javascript Date?
- Форматирование Даты и Времени в Соответствии с Разными Языками
- Метод Intl.DateTimeFormat()
- Как Сравнить 2 Даты
- Использование Библиотеки Moment.js
- Популярные статьи
Объект Date: Текущая Дата и Время в Javascript
В этом посте хочу затронуть тему работы с датами в Javascript, которая, при первом приближении, может показаться сложной.
Для работы с датами Javascript предоставляет разработчикам встроенный функционал в виде объекта Date .
Экземпляр объекта Date — это момент времени. Методы объекта позволяют управлять не только датами, но и временем.
Рассмотрим 4 способа создать новый объект Date.
1. Использовать конструктор new Date() без передачи дополнительных параметров
Для создания нового объекта Date требуется вызвать конструктор:
1new Date();2 // Wed Sep 23 2020 12:59:15 GMT+0300 (Москва, стандартное время)
Это позволит нам получить новый экземпляр объекта Date , содержащий текущий момент времени.
В качестве нулевой (базовой) даты, Javascript использует 1 Января 1970 00:00:00 UTC . Текущий момент времени — количество миллисекунд, прошедших с нулевой даты.
2. Использовать конструктор new Date() с передачей временной метки, выраженной в миллисекундах
Вероятно, вы сталкивались с временной меткой Unix, которая использует ту же нулевую дату, но представлена не в миллисекундах, а секундах.
Мы можем передать временную метку Unix в объект Date и получить соответствующий момент времени следующим образом:
1const unixTimeStamp = 1600855031;2 new Date(unixTimeStamp * 1000);3 // Wed Sep 23 2020 12:57:11 GMT+0300 (Москва, стандартное время)
Если мы передадим 0 в объект Date , то получим нулевую дату 1 Января 1970.
1new Date(0);2 // Thu Jan 01 1970 03:00:00 GMT+0300 (Москва, стандартное время)
Можно также использовать встроенный метод Date.now() , чтобы получить текущую временную метку в миллисекундах и передать ее в объект Date .
1Date.now();2 // 16008553521163 new Date(1600855352116);4 // Wed Sep 23 2020 13:02:32 GMT+0300 (Москва, стандартное время)
3. Передать дату в объект Date — в формате строки
Мы также можем использовать строчные выражения для передачи в объект Date и получения соответствующего момента времени. В этом случае в объекте Date будет автоматически использоваться метод parse для определения даты и времени, которые мы в него передаем.
1new Date('2020-09-20');2 // Sun Sep 20 2020 03:00:00 GMT+0300 (Москва, стандартное время)34 new Date('2020/09/20');5 // Sun Sep 20 2020 00:00:00 GMT+0300 (Москва, стандартное время)67 new Date('September 20, 2020');8 // Sun Sep 20 2020 00:00:00 GMT+0300 (Москва, стандартное время)910 new Date('20 September 2020');11 // Sun Sep 20 2020 00:00:00 GMT+0300 (Москва, стандартное время)1213 new Date('September 2020');14 // Tue Sep 01 2020 00:00:00 GMT+0300 (Москва, стандартное время)1516 new Date('2020 September');17 // Tue Sep 01 2020 00:00:00 GMT+0300 (Москва, стандартное время)1819 new Date('2020-09');20 // Tue Sep 01 2020 03:00:00 GMT+0300 (Москва, стандартное время)
Также есть возможность использовать метод Date.parse() , который возвращает временную метку в миллисекундах.
1new Date('September 20, 2020');2 // Sun Sep 20 2020 00:00:00 GMT+0300 (Москва, стандартное время)34 Date.parse('September 20, 2020');5 // 1600549200000
4. Передать набор параметров в объект Date
Еще один способ создать новый экземпляр объекта Date – передать в него набор значений, соответствующих году, месяцу (первый месяц равен 0), дню, часу, минутам, секундам и миллисекундам.
1new Date(2020, 8, 20, 18, 30, 10, 0);2 // Sun Sep 20 2020 18:30:10 GMT+0300 (Москва, стандартное время)
Во всех случаях, указанных выше, мы получаем дату, привязанную к временной зоне нашего компьютера. То есть, используя одинаковые входные данные на разных компьютерах, можно получить разные результаты.
Javascript использует UTC в качестве базовой временной зоны, и производит автоматическую конверсию в локальную временную зону вашего компьютера.
Как Поменять Временную Зону?
У нас есть 2 варианта изменения временной зоны при создании нового экземпляра объекта Date:
1new Date('January 20, 2020 11:10:05 +0700');
1new Date('January 20, 2020 11:10:05 (CET)');
Важно учитывать, что, если во 2-м случае вы передадите название временной зоны в неверном формате, Javascript автоматически будет использовать зону UTC. При этом вы не получите сообщения об ошибке.
В первом случае, при передаче часов в неверном формате, Javascript оповестит вас ошибкой “Invalid Date”.
Объект Date: Форматирование
Объект Date содержит ряд методов, которые возвращают дату и время в формате строки:
1const date = new Date('September 20, 2020 11:10:05');23date.toString();4 // "Sun Sep 20 2020 11:10:05 GMT+0300 (Москва, стандартное время)"56date.toTimeString();7 // "11:10:05 GMT+0300 (Москва, стандартное время)"89date.toDateString();10 // "Sun Sep 20 2020"1112date.toUTCString();13 // "Sun, 20 Sep 2020 08:10:05 GMT"1415date.toISOString();16 // "2020-09-20T08:10:05.000Z"1718date.toLocaleTimeString();19 // "11:10:05"2021date.toLocaleString();22 // "20.09.2020, 11:10:05"
Javascript: Текущая дата и время (все методы получения)
Для получения значений даты и времени используются следующие методы:
1const date = new Date('September 20, 2020 11:10:05');23date.getTime();4 // 160058940500056date.getFullYear();7 // 202089date.getDate();10 // 201112date.getDay();13 // 0 (0 – означает Воскресенье, 1 - Понедельник)1415date.getMonth();16 // 8 (0 - Январь)1718date.getHours();19 // 112021date.getMinutes();22 // 102324date.getSeconds();25 // 52627date.getMilliseconds();28 // 02930date.getTimezoneOffset();31 // -180 (указана разница между локальным и UTC временем в минутах)
Также есть возможность сразу получать значения даты и времени привязанных не локальной зоне компьютера пользователя, а к зоне UTC.
1date.getUTCFullYear();2 // 202034date.getUTCDate();5 // 2067date.getUTCDay();8 // 0910date.getUTCMonth();11 // 8 (0 - Январь)1213date.getUTCHours();14 // 8 – Отличается от значения полученного в локальной временной зоне1516date.getUTCMinutes();17 // 101819date.getUTCSeconds();20 // 52122date.getUTCMilliseconds();23 // 0 (0 – значение не указано)
Установка Компонентов Даты и Времени
Для установки отдельных компонентов даты или времени можно использовать следующие методы:
1const date = new Date('September 20, 2020 11:10:05');23 // 1. Установка новой даты4date.setDate(22);5 // 1600762205000 - получаем новую временную метку67 // 2. Передадим новую метку в объект Date и получим значение с обновленной датой8 const newDate = new Date(1600762205000);9 // Tue Sep 22 2020 11:10:05 GMT+0300 (Москва, стандартное время)
Другие методы установки отдельных компонентов объекта Date :
1// используется вместо устаревшего метода setYear()2date.setFullYear(новое значение)3date.setMonth(month)4date.setHours(hour)5date.setMinutes(min)6date.setSeconds(sec)7date.setMilliseconds(ms)8date.setTime(ms)
Методы setHours() , setMinutes() и setSeconds() помимо базовых значений принимают значения минут, секунд или миллисекунд для более точных установок. Формат ввода выглядит следующим бразом:
1setHours(18, 45, 20, 10);2 setMinutes(min, sec, ms);3 setSeconds(sec, ms);
Стоить помнить, что если мы укажем обновленное значение часов следующим образом date.setHours(72) , то это приведет к обновлению нашей даты (прибавится 3 дня).
Как Получить Текущее Время из Объекта Javascript Date?
Для получения текущего времени, выраженного в миллисекундах можно использовать метод Date.now() вместо более длинного варианта new Date().getTime() .
Форматирование Даты и Времени в Соответствии с Разными Языками
API Интернационализации (Internationalization API) используется для форматирования даты и времени в соответствии с нужным языком.
В качестве примера, можно привести различия в формате написания дат в России (первым идет день — 31.01.2020) и США (первым идет месяц — 01.31.2020).
Все методы интернационализации дат, времени, а также других единиц (валют) доступны в объекте Intl .
Метод Intl.DateTimeFormat()
В этом посте нас интересует метод Intl.DateTimeFormat() , который используется для форматирования даты и времени.
Рассмотрим следующий пример:
Давайте получим дату в локальном формате:
1const date = new Date('September 20, 2020 11:10:05');2 new Intl.DateTimeFormat().format(date);3 // "20.09.2020"
Теперь получим дату в формате, который используется в США. Для этого используем параметр en-Us (английский язык, используемый в США (US)):
1const date = new Date('September 20, 2020 11:10:05');2 new Intl.DateTimeFormat('en-Us').format(date);3 // "9/20/2020"
Как Сравнить 2 Даты
Самый простой способ сравнить 2 даты – использовать метод Date.getTime() .
1const date1 = new Date('September 20, 2020 11:10:05');2 const date2 = new Date('September 25, 2020 11:10:05');34 const difference = date2.getTime() - date1.getTime();5 // 432000000 – получаем разницу в миллисекундах
Также для сравнения дат можно использовать условия if :
1if (date2.getTime() === date1.getTime())2 console.log('даты равны');3 // даты равны4 >
Использование Библиотеки Moment.js
Рассмотрим несколько примеров ее использования.
Сначала устанавливаем пакет с помощью команды npm install moment .
1// 1. Импортируем установленный пакет:2 import moment from ‘moment’;34 // 2. Получаем текущую дату и время:5 const date = moment();67 // 3. Мы можем инициализировать новый объект moment,8 // передав в него строку с датой и временем9 const date = moment('September 20, 2020');1011 // 4. Далее можно вывести дату и время в нужном формате:12 const date = moment().format('MM Do, YYYY');
Список опций форматирования доступен в документации библиотеки (пара примеров):
Один из методов библиотеки, которые часто приходится использовать – fromNow() , который возвращает количество времени, которое прошло с указанной даты.
1moment('2020-06-20').fromNow();2 // 3 месяца назад
Я использую этот метод для отображения времени, которое прошло с даты публикации постов в блоге.
Переменные JavaScript var, let и const (в чем отличие и когда использовать)?
Тернарный оператор (условный оператор Javascript).