Date

Дата и время

Класс Date абстрагирует большую часть работы с датами напрямую. Это позволяет нам представлять моменты во времени как объекты и манипулировать ими заранее определёнными методами. Используя возможности класса Date можно создавать часы, счетчики, календари и другие интерактивные элементы интефрейса.

Создание даты

Экземпляр объекта Date это объект представляющий определённый момент времени. Создание даты без аргументов, возвращает объект хранящий дату и время на момент его инициализации, то есть текущие. В строчном преобразовании объект возвращает результат вызова метода toString(), поэтому в первом логе мы получим строку, а не объект.

const date = new Date();console.log(date);// "Fri Jun 18 2021 15:01:35 GMT+0300 (Eastern European Summer Time)"console.log(date.toString());// "Fri Jun 18 2021 15:01:35 GMT+0300 (Eastern European Summer Time)"

Unix время

Внутренне даты представлены в миллисекундах прошедших с полночи 1 января 1970 года в часовом поясе UTC. Для компьютера это дата начала отсчета всего времени - Unix время. Поэтому при инициализации даты одним числом, оно представляет собой количество прошедших миллисекунд.

console.log(new Date(0));// "Thu Jan 01 1970 03:00:00 GMT+0300 (Eastern European Standard Time)"console.log(new Date(15000));// "Thu Jan 01 1970 03:00:15 GMT+0300 (Eastern European Standard Time)"

Метод getTime() возвращает числовое представление даты (timestamp) - количество миллисекунд прошедших с полночи 1 января 1970 года.

const date = new Date();console.log(date.getTime()); // 1624021654154

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

Установка даты

При создании экземпляра класса Date, можно установить дату строкой или числами. Строка может описывать только дату или дату и время.

const teamMeetingDate = new Date("March 16, 2030");console.log(teamMeetingDate);// "Mon Mar 16 2030 00:00:00 GMT+0200 (Eastern European Standard Time)"const preciseTeamMeetingDate = new Date("March 16, 2030 14:25:00");console.log(preciseTeamMeetingDate);// "Mon Mar 16 2030 14:25:00 GMT+0200 (Eastern European Standard Time)"

Установка времени в виде строк внутренне вызывает метод Date.parse(), который преобразует строку в число - количество миллисекунд. Именно поэтому формат передаваемой строки очень гибкий. Например, можно не указывать ноль для дней и месяца. Рассмотрим несколько примеров, которые приведут к одинаковому результату.

new Date("2030-03-16");new Date("2030-03");new Date("2030");new Date("03/16/2030");new Date("2030/03/16");new Date("2030/3/16");new Date("March 16, 2030");new Date("March 16, 2030 14:25:00");new Date("2030-03-16 14:25:00");new Date("2030-03-16T14:25:00");new Date("16 March 2030");

Другой способ создания новых объектов - это передать семь чисел, которые описывают год, месяц (начинается с 0), день, часы, минуты, секунды и миллисекунды. Обязательны только первые три.

const date = new Date(2030, 2, 16, 14, 25, 0, 0);console.log(date);// Sat Mar 16 2030 14:25:00 GMT+0200 (Eastern European Standard Time)

Методы

Экземпляр класса Date имеет множество методов для чтения и записи значений даты и времени. Методы возвращают или присваивают год, месяц, день месяца или недели, час, минуту, секунду и миллисекунду для каждого экземпляра. Эти данные могут быть представлены в виде строки с учетом местного календаря или языка.

Геттеры

Геттеры используются для чтения всей даты или отдельной составляющей. Возвращаемое значение зависит от текущего часового пояса установленного на вашем компьютере.

const date = new Date();console.log("Date: ", date);// Возвращает день месяца от 1 до 31console.log("getDate(): ", date.getDate());// Возвращает день недели от 0 до 6console.log("getDay(): ", date.getDay());// Возвращает месяц от 0 до 11console.log("getMonth(): ", date.getMonth());// Возвращает год из 4 цифрconsole.log("getFullYear(): ", date.getFullYear());// Возвращает часconsole.log("getHours(): ", date.getHours());// Возвращает минутыconsole.log("getMinutes(): ", date.getMinutes());// Возвращает секундыconsole.log("getSeconds(): ", date.getSeconds());// Возвращает миллисекундыconsole.log("getMilliseconds(): ", date.getMilliseconds());

Скопировать

Существуют эквивалентные версии этих методов, которые возвращают значения в формате UTC (Coordinated Universal Time), а не адаптированные к текущему часовому поясу пользователя.

const date = new Date();console.log("Date: ", date);// Возвращает день месяца от 1 до 31console.log("getUTCDate(): ", date.getUTCDate());// Возвращает день недели от 0 до 6console.log("getUTCDay(): ", date.getUTCDay());// Возвращает месяц от 0 до 11console.log("getUTCMonth(): ", date.getUTCMonth());// Возвращает год из 4 цифрconsole.log("getUTCFullYear(): ", date.getUTCFullYear());// Возвращает часconsole.log("getUTCHours(): ", date.getUTCHours());// Возвращает минутыconsole.log("getUTCMinutes(): ", date.getUTCMinutes());// Возвращает секундыconsole.log("getUTCSeconds(): ", date.getUTCSeconds());// Возвращает миллисекундыconsole.log("getUTCMilliseconds(): ", date.getUTCMilliseconds());

Сеттеры

Все, что можно прочитать можно записать, методы для записи называются также как геттеры, но начинаются с приставки set. Также для всех методов есть их UTC эквивалент.

const date = new Date("March 16, 2030 14:25:00");date.setMinutes(50);// "Sat Mar 16 2030 14:50:00 GMT+0200"date.setFullYear(2040, 4, 8);// "Tue May 08 2040 14:50:00 GMT+0300"

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

Объект даты может быть представлен в разных строчных и числовых форматах. Для этого существует целый набор методов. Например, toString(), toDateString() и toTimeString() возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему - читаемость человеком. Метод toString() возвращает дату целиком, а toDateString() и toTimeString() - только дату и время соответственно.

const date = new Date("March 16, 2030 14:25:00");date.toString();// "Sat Mar 16 2030 14:25:00 GMT+0200 (Eastern European Standard Time)"date.toTimeString();// "14:25:00 GMT+0200 (Eastern European Standard Time)"date.toLocaleTimeString();// "2:25:00 PM"date.toUTCString();// "Sat, 16 Mar 2030 12:25:00 GMT"date.toDateString();// "Sat Mar 16 2030"date.toISOString();// "2030-03-16T12:25:00.000Z"date.toLocaleString();// "3/16/2030, 2:25:00 PM"date.getTime();// 1899894300000

Last updated