Создание даты
Вы можете создать дату, использовав оператор new:
- Со строкой даты.
- С аргументами даты.
- С меткой времени.
- Без аргументов.
Способ со строкой даты
Мы передаем строку даты в конструктор .
new Date('1988-03-21')
Но если вы передадите строковое представление даты в формате 21-03-1988, то получите ошибку.
new Date(’21-03-1988′) приводит к ошибке Invalid Date.
В JavaScript нужно использовать формат даты, который принят во всем мире — ISO 8601.
// Расширенный формат ISO 8601 `YYYY-MM-DDTHH:mm:ss:sssZ`
Вот что означают значения:
- : 4-значный год;
- : двузначный месяц (где январь 01, а декабрь 12);
- : двузначная дата (от 01 до 31);
- : разделители даты;
- : указывает на начало блока времени;
- : часы в 24-часовом формате (от 00 до 23);
- : минуты (от 00 до 59);
- : секунды (от 00 до 59);
- : миллисекунды (от 000 до 999);
- : разделители времени;
- : если присутствует, дата будет установлена в UTC. Если отсутствует, это будет местное время.
Часы, минуты, секунды и миллисекунды необязательны, если вы создаете дату. Если нужно передать дату 11 июня 2019 года:
new Date('2019-06-11')
Но если вы находитесь к востоку от Гринвича, то получите дату 10 июня.
new Date(‘2019-06-11’) выдаёт 10 июня, если вы находитесь к востоку от Гринвича
Если в районе, который опережает время по Гринвичу, то получите дату 11 июня.
new Date(‘2019-06-11’)выдаёт 11 июня, если вы находитесь к западу от Гринвича
Это происходит потому, что вы передаете дату без указания времени. В итоге JavaScript выводит дату, установленную в UTC.
Строка кода создает дату 11 июня 2019, 12:00 UTC. Вот почему люди, которые живут восточнее Гринвича, получают 10 июня вместо 11 июня.
Если вы хотите создать дату по местному часовому поясу, необходимо указать время. Когда вы включаете в дату время, вам нужно добавить, как минимум, часы и минуты (иначе Google Chrome возвращает недопустимую дату).
new Date('2019-06-11T00:00')
Дата по местному времени и дата в UTC.
Кстати, MDN предостерегает от использования строкового представления даты, поскольку браузеры могут ее трактовать по-разному.
MDN не рекомендует создавать даты с помощью строкового представления.
Создание дат с помощью аргументов
Конструктор Date принимает семь параметров:
- Год: четырехзначный год.
- Месяц: месяц года (0-11). По умолчанию 0.
- День: день месяца (1-31). По умолчанию 1.
- Час: час дня (0-23). По умолчанию 0.
- Минуты: Минуты (0-59). По умолчанию 0.
- Секунды: секунды (0-59). По умолчанию 0.
- Миллисекунды: миллисекунды (0-999). По умолчанию 0.
// 11 июня 2019г. 5:23:59 местного времени new Date(2019, 5, 11, 5, 23, 59)
Многие разработчики избегают подхода с использованием аргументов, потому что он выглядит сложным. Но на самом деле все довольно просто.
new Date(2017, 3, 22, 5, 23, 50) // Эту дату легко понять, если читать ее слева направо. // Год: 2017 // Месяц: апрель (потому что месяца считаются с 0) // Дата: 22 // Часы: 05 // Минут: 23 // Секунды: 50
Но помните, что порядок месяца начинаются с нуля. Например, январь – 0, февраль – 1, март – 2 и т. д.
Вот еще несколько примеров для закрепления:
// 21 марта 1988г. 00:00 местного времени new Date(1988, 2, 21) // 25 декабря 2019г. 8:00 местного времени new Date(2019, 11, 25, 8) // 6 ноября 2023г. 2:20 местного времени new Date(2023, 10, 6, 2, 20) // 11 июня 2019г. 5:23:59 местного времени new Date(2019, 5, 11, 5, 23, 59)
Даты, созданные с помощью аргументов, указаны по местному времени. Если вам понадобится дата в формате UTC, используйте следующий синтаксис:
// 11 июня 2019 00:00 UTC. new Date(Date.UTC(2019, 5, 11))
Создание дат с помощью меток времени
В JavaScript метка времени – это количество миллисекунд, прошедших с 1 января 1970 г. (от начала эпохи Unix). Метки времени используются только для сравнения различных дат.
// 11 июня 2019 8:00 (по моему местному времени в Сингапуре) new Date(1560211200000)
Без аргументов
Если использовать конструктор объекта Date() без аргументов, то он возвращает дату по местному времени.
new Date()
Текущее время.
Получение даты из другой даты
Чтобы получить дату из другой даты, нужно:
- Установить конкретное значение даты/времени из другой даты.
- Добавить/вычесть отрезок времени из другой даты.
Установка конкретной даты / времени
Для этого можно использовать следующие методы:
- : устанавливает четырехзначный год по местному времени.
- : устанавливает месяц года по местному времени.
- : устанавливает день месяца по местному времени.
- : устанавливает часы по местному времени.
- : устанавливает минуты по местному времени.
- : устанавливает секунды по местному времени.
- : устанавливает миллисекунды по местному времени.
Например, если вы хотите задать дату для 15 числа месяца, вы можете использовать метод .
const d = new Date(2019, 0, 10) d.setDate(15) console.log(d) // 15 января 2019
Чтобы установить июнь месяц, примените метод :
const d = new Date(2019, 0, 10) d.setMonth(5) console.log(d) // 10 июня 2019
Методы установки значений даты изменяют исходный объект Date(). На практике лучше модифицировать отдельный экземпляр объекта.
const d = new Date(2019, 0, 10) const newDate = new Date(d) newDate.setMonth(5) console.log(d) // 10 января 2019 console.log(newDate) // 10 июня 2019
Добавление/вычитание периода времени из другой даты
Чтобы добавить/вычесть период времени, нужно знать значение текущей даты. Его можно получить с помощью следующих методов:
- : возвращает четырехзначный год по местному времени.
- : возвращает месяц года (0-11) по местному времени.
- : возвращает день месяца (1-31) по местному времени.
- : возвращает часы (0-23) по местному времени.
- : возвращает минуты (0-59) по местному времени.
- : возвращает секунды (0-59) по местному времени.
- : возвращает миллисекунды (0-999) по местному времени.
Допустим, что вы хотите назначить свидание через три дня (начиная с сегодняшнего дня). Предположим, что сегодня 28 марта 2019 года.
Первый подход (установка значения)
// Подразумеваем, что сегодня 28 марта 2019 const today = new Date(2019, 2, 28)
Сначала создаем новый объект Date (чтобы не изменять исходный экземпляр объекта):
const finalDate = new Date(today)
С помощью получаем значение, которое хотим изменить:
const currentDate = today.getDate()
Свидание произойдет через три дня. Поэтому добавляем их к текущей дате:
finalDate.setDate(currentDate + 3)
Полный код для первого подхода:
const today = new Date(2019, 2, 28) const finalDate = new Date(today) finalDate.setDate(today.getDate() + 3) console.log(finalDate) // 31 марта 2019
Второй подход (создание новой даты)
Сначала используем , , и другие методы, пока не получим типа значения, которое мы изменить. Затем мы создаём искомую дату при помощи .
const today = new Date(2019, 2, 28) // Получение нужных значений const year = today.getFullYear() const month = today.getMonh() const day = today.getDate() // Создание новой даты const finalDate = new Date(year, month, day + 3) console.log(finalDate) // 31 марта 2019
Оба подхода работают.