Date JS - Дата и время в JavaScript

Содержание

Для работы с датой и временем в JavaScript существует встроенный объект Date, который содержит методы для создания, хранения, изменения или вывода элементов времени с точностью до миллисекунды. К таким элементам относят: год, месяц, день месяца, неделя, час, минута, секунда, миллисекунда, день недели.

Создать объект Date можно с помощью аргументов:

Или пропустить аргументы вовсе.

new Date()

Создадим экземпляр объекта 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().

new Date(value)

Создать объект 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 года.

getTime()

Количество миллисекунд прошедших с 1 января 1970 года по сегодняшний или заданный момент времени называется timestamp и может быть получено из new Date() с помощью метода getTime().

    
    date = new Date(2019, 5);
    alert(date.getTime()); // количество миллисекунд прошедшие с 1 января 1970 года
    alert(new Date(date.getTime())) // получаем дату обратно        
    

Date.now()

Если необходимо получить количество миллисекунд прошедших с 1 января 1970 года по данный момент правильней будет использовать метод Date.now().

    
    let date = Date.now();
    alert(date);        
    

Запись эквивалента new Date().getTime(), но в отличие от этой конструкции Date.now() не создает промежуточный объект Date, что может быть особенно важно при разработке, где упор идет на быстродействие.

new Date(dateString)

Создать объект 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(year, month, date, hours, minutes, seconds, millisecond)

    
    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-ый.

UTC-варианты методов

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

Получение элементов даты согласно UTC:

getUTCFullYear(), getUTCMonth(), getUTCDate(), getUTCHours(), getUTCMinutes(), getUTCSeconds(), getUTCMilliseconds(), getUTCDay()

Установка компонентов даты и времени согласно UTC:

setUTCFullYear(), setUTCMonth(), setUTCDate(), setUTCHours(), setUTCMinutes(), setUTCSeconds(), setUTCMilliseconds()

Преобразование объекта Date к строке

Для того, чтобы получить из 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 аргументы времени некорректного формата (целые числа), дата будет корректироваться переносом значения на соседнее.