Для работы с датой и временем в JavaScript существует встроенный объект Date
, который содержит методы для создания, хранения, изменения или вывода элементов времени с точностью до миллисекунды. К таким элементам относят: год, месяц, день месяца, неделя, час, минута, секунда, миллисекунда, день недели.
Создать объект Date
можно с помощью аргументов:
new Date(value)
;new Date(dateString)
;Или пропустить аргументы вовсе.
Создадим экземпляр объекта Date
без дополнительных аргументов и выведем получившийся результат в console.
let date = new Date();
console.log(date); // Thu Sep 01 2022 06:46:30 GMT+1200 (Фиджи)
console.log(date.getFullYear()); // 2022
Получим дату и время согласно часовому поясу, которое установлено на локальном компьютере.
Точно такую же информацию мы можем получить написав Date()
без new
.
let date = Date();
console.log(date);
console.log(date.getFullYear()); // получим ошибку
Однако в этом случае мы получим строку, объект же Date
может быть создан только путем вызова функции-конструктора, а следовательно с использованием оператора new
. Встроенные методы, для работы с датой в JavaScript, со строкой работать не будут, кроме Date.parse()
.
Создать объект Date
, можно передав в качестве аргумента количество миллисекунд.
console.log(new Date(0)); // Thu Jan 01 1970 12:00:00 GMT+1200 (Фиджи)
console.log(new Date(818079300000)); // Tue Dec 05 1995 00:15:00 GMT+1200 (Фиджи)
console.log(new Date(-268065720000)); // Tue Jul 04 1961 21:18:00 GMT+1200 (Фиджи)
Результат = 1 января 1970 года UTC+0 + количество миллисекунд.
Если указать миллисекунды со знаком минус, отсчет пойдет в обратную сторону. Таким образом все, что со знаком минус будет соответствовать дате до 1 января 1970 года.
Количество миллисекунд прошедших с 1 января 1970 года по сегодняшний или заданный момент времени называется timestamp и может быть получено из new Date()
с помощью метода getTime()
.
date = new Date(2019, 5);
alert(date.getTime()); // количество миллисекунд прошедшие с 1 января 1970 года
alert(new Date(date.getTime())) // получаем дату обратно
Если необходимо получить количество миллисекунд прошедших с 1 января 1970 года по данный момент правильней будет использовать метод Date.now()
.
let date = Date.now();
alert(date);
Запись эквивалента new Date().getTime()
, но в отличие от этой конструкции Date.now()
не создает промежуточный объект Date
, что может быть особенно важно при разработке, где упор идет на быстродействие.
Создать объект Date
можно передав в качестве аргумента строку с датой и временем.
date = new Date('2021-09-25T05:27:00');
alert(date); // Sun Sep 25 2022 05:27:00 GMT+1300 (Тонга)
Дата должна быть записана в формате понятном методу Date.parse()
, который преобразовывает строку в количество миллисекунд прошедших с 1 января 1970 года UTC+0. Если формат записи будет не верным, метод вернет NaN
.
date = new Date('2021-09-25T05:27:00');
alert(Date.parse(date));
new Date(1995, 11, 4, 3, 15, 10, 0); // Mon Dec 04 1995 03:15:10 GMT-0600 (Центральная Америка)
Рассмотрим все возможные аргументы по порядку:
Год (year) - обязательный аргумент. Обычно записывается полностью - все четыре числа - 2022. Допустима, но не рекомендуется запись от 0 до 99. В этом случае год будет интерпретирован, как 1900 + заданное число.
Месяц (month) - обязательный аргумент и целое число от 0 до 11, где первое это январь, а последнее декабрь.
День (date) - необязательный аргумент обозначающий день месяца, если не задан, то по умолчанию принимает значение 1. Отсчет начинается с единицы.
Часы (hours) - от 1 до 24
Минуты (minutes) - от 1 до 60
Секунды (seconds) - от 1 до 60
Миллисекунды (millisecond) - от до 1000
Часы, минуты, секунды и миллисекунды - это целые числа, если аргумент не задан, то по умолчанию принимается значение 0.
Если при создании объекта Date
в качестве аргумента задано число больше или меньше логического диапазона, программа автоматически переформатирует его в корректное, перенеся значение не соседнее. Если год 2010, а месяц 12 – это будет январь 2011. Если задать 10 часов 61 минуту – это будет 11 часов 1 минута. Если месяц апрель, а день 0 это 31 марта.
getFullYear()
let date = new Date('1996-12-17T05:30:00');
date.getFullYear(); // 1996
Метод позволяет получить год из объекта Date
, если аргументов нет вернет текущий.
getMonth()
let date = new Date('1996-12-17T05:30:00');
date.getMonth(); // 11
Метод вернет месяц в формате от 0 до 11, если аргументов нет текущий.
getDate()
let date = new Date('1996-12-17T05:30:00');
date.getDate(); // 17
Метод возвращает день месяца указанного в объекте, если аргументов нет вернет текущую дату по местному времени.
getHours(), getMinutes(), getSeconds(), getMilliseconds()
let date = new Date(1996, 11, 17, 21, 30, 10, 900);
date.getHours(); // 21 или 9 часов вечера
date.getMinutes(); // 30 минут
date.getSeconds(); // 10 секунд date.getMilliseconds(); 900 миллисекунд
Если аргумент отсутствует метод вернёт 0.
getTimezoneOffset()
Метод возвращает разницу в минутах между локальным временем и UTC.
let date = new Date().getTimezoneOffset();
alert(date); // при UTC +3 покажет -180
getDay()
let date = new Date(1996, 11, 17);
date.getDay(); // 2
Метод возвращает день недели, отсчет начинается с 0 (воскресенье) и заканчивается 6-ю (суббота). В примере 1996 год 17 декабря и это вторник, следовательно результат 2.
Для того, чтобы заменить или передать в объект Date
отдельные компоненты времени используют следующие методы. В квадратных скобках необязательные элементы, которые при отсутствии игнорируются.
setFullYear(год, [месяц], [день месяца])
setMonth(месяц, [день месяца])
setDate(день месяца)
setHours(часы, [минуты], [секунды], [миллисекунды])
setMinutes(минуты, [секунды], [миллисекунды])
setSeconds(секунды, [миллисекунды])
setMilliseconds(миллисекунды)
setTime()
- устанавливает время в Date
равным количеству миллисекунд прошедших с 1 января 1970 г. UTC.
При использовании методов результат возвращается в миллисекундах прошедших с 1 января 1970 г. по времени установленном на компьютере.
let date = new Date(2019, 0); // Tue Jan 01 2019 00:00:00 GMT+0300 (Москва)
date.setFullYear(2021); // 1609448400000 мс, что равно Fri Jan 01 2021 00:00:00 GMT+0300 (Москва)
В примере мы передали в объект 2021 год, который и заменил 2019-ый.
Методы получения и передачи элементов для объекта Date
работают согласно времени установленном на компьютере. Для того, чтобы в качестве результата получать дату относительно всемирного координированного времени (UTC) используют похожие методы, отличающиеся только вставкой UTC.
Получение элементов даты согласно UTC:
getUTCFullYear()
, getUTCMonth()
, getUTCDate()
, getUTCHours()
, getUTCMinutes()
, getUTCSeconds()
, getUTCMilliseconds()
, getUTCDay()
Установка компонентов даты и времени согласно UTC:
setUTCFullYear()
, setUTCMonth()
, setUTCDate()
, setUTCHours()
, setUTCMinutes()
, setUTCSeconds()
, setUTCMilliseconds()
Для того, чтобы получить из Date
нужные элементы даты и времени в формате строки используют следующие методы:
toString()
- дата и время
toTimeString()
- только время
toDateString()
- только дата
toUTCString()
- дата и время в формате UTC
toISOString()
- дата и время в формате ISO
toLocaleTimeString()
- только время в локальном формате
toLocaleString()
- дата и время в локальном формате
let date = new Date(2018, 4, 19, 2, 34, 10);
date.toString(); // Sat May 19 2018 02:34:10 GMT+0300 (Москва)
date.toTimeString(); // 02:34:10 GMT+0300 (Москва)
date.toDateString(); // Sat May 19 2018
date.toUTCString(); // Fri, 18 May 2018 23:34:10 GMT
date.toISOString(); // 2018-05-18T23:34:10.000Z
date.toLocaleTimeString(); // 02:34:10
date.toLocaleString(); // 19.05.2018, 02:34:10
1. Объект Date
может быть создан без аргументов или с аргументами. В первом случае получим текущую временную метку, во втором задаем нужный отрезок времени с помощью миллисекунд, строки с датой или аргументов (год, месяц, день, часы, минуты, секунды, миллисекунды).
2. Для получения отдельных элементов Date
используют методы - getFullYear()
, getMonth()
, getDate()
, getHours()
, getMinutes()
, getSeconds()
, getMilliseconds()
, getDay()
.
3. Для того, чтобы установить новые компоненты даты и времени используют: setFullYear()
, setMonth()
, setDate()
, setHours()
, setMinutes()
, setSeconds()
, setMilliseconds()
, setTime()
.
4. Для получения даты в нужном формате в виде строки используют: toString()
, toTimeString()
, toDateString()
, toUTCString()
, toISOString()
, toLocaleTimeString()
, toLocaleString()
.
5. При создании Date
в независимости какие аргументы и в каком формате передаются, создается объект со всеми элементами времени.
6. Если передать в Date
аргументы времени некорректного формата (целые числа), дата будет корректироваться переносом значения на соседнее.