Содержание

Дата и время в JavaScript. JavaScript определяет класс Date для… | by Roman | NOP::Nuances of Programming | Apr, 2023

JavaScript определяет класс Date для представления и оперирования числами с целью отображения даты и времени.

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

Результат работы конструктора Date() зависит от переданных ему аргументов.

Например:

  1. Конструктор без аргумента (Date()) выдает текущее время.
  2. Конструктор с одним аргументом (Date(milliseconds)) интерпретирует этот аргумент как количество миллисекунд, прошедших с 1970 года.
  3. Конструктор с двумя и более аргументами (Date(year, month, day, hours, minutes, seconds, milliseconds)) интерпретирует эти аргументы как год, месяц, день месяца, час, минуту, секунду и миллисекунду по местному часовому поясу.

В API Date первый месяц года обозначается как 0, а первый день месяца — как 1.

Конструктор Date() интерпретирует аргументы, используя часовой пояс локального компьютера.

На компьютере автора установлено индийское стандартное время, поэтому даты и время в этой статье интерпретируются по индийскому стандартному времени.

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

Пример: добавление часового пояса UTC (универсальное скоординированное по Гринвичу время).

Date.UTC() принимает те же аргументы, что и конструктор Date(), интерпретирует их в UTC и возвращает миллисекундную метку времени, которую можно передать конструктору Date(). По умолчанию результаты будут отображаться в часовом поясе локального компьютера. Чтобы отобразить дату в UTC, необходимо применить toString(), toUTCString() или toISOString().

Отображение даты в локальном часовом поясеОтображение даты после передачи в форматах toString(), toUTCString() или toISOString()

Методы get и set используются для запроса и изменения в объекте Date полей year, month, day-of-month, hours, minutes, seconds и milliseconds.

Эти методы применяются двумя способами: по местному времени и по UTC.

  1. Метод get помогает получить полный год (FullYear) в Date-объекте:
  • getFullYear();
  • getUTCFullYear().

2. Метод set помогает установить полный год (FullYear) в Date-объекте:

  • setFullYear();
  • setUTCFullYear().

Для получения и установки других Date-полей необходимо заменить вышеупомянутые методы get и set ‘FullYear’ на имя конкретного поля (например, getMonth, getUTCMonth, setMonth, setUTCMonth).

Методы set для Date-объектаМетоды get для Date-объекта

Примечание. Методы для запроса:

  • дня месяца — — → getDate() и getUTCDate();
  • дня недели (от 0 для воскресенья до 6 для субботы) — — → getDay() и getUTCDay(). Дни недели доступны в режиме “только для чтения”, так что не существует метода setDay().
Методы getDate() и getDay()

JavaScript по умолчанию представляет даты как целые числа, которые указывают количество миллисекунд, прошедших с (или до) полуночи 1 января 1970 года по UTC. Это называется временными метками. Статический метод Date.now() возвращает текущее время в виде временной метки.

В классе Date применяются следующие методы форматирования строк.

  • toString() — использует местный часовой пояс, но не форматирует дату и время с учетом локали.
  • toUTCString() — использует часовой пояс UTC, но не форматирует дату с учетом локали.
  • toISOString() — выводит дату и время в стандартном формате “year-month-day hours:minutes:seconds.ms” (по стандарту ISO-8601). Буква “T” отделяет часть вывода даты от части вывода времени. Время выражается в UTC, что обозначается буквой “Z” в качестве последней буквы вывода.
  • toLocaleString() — использует местный часовой пояс и формат, соответствующий локали пользователя.
  • toDateString() — форматирует только часть даты и опускает время. Этот метод использует локальный часовой пояс и не выполняет форматирование, соответствующее локали.
  • toLocaleDateString() — форматирует только дату. Этот метод использует местный часовой пояс и формат даты, соответствующий локали.
  • toTimeString() — форматирует только время и опускает дату. Этот метод использует местный часовой пояс, но не форматирует время в соответствии с локалью.
  • toLocaleTimeString() — форматирует время с учетом локали и использует местный часовой пояс.
Примеры форматирования Date-строк

В объекте Date существует статический метод parse(), который принимает в качестве аргумента строковое представление даты и возвращает временную метку, представляющую дату с 1 января 1970 года 00:00:00 UTC или NaN, если строка не распознана или не имеет подходящих значений даты.

Примеры использования метода parse()

Читайте также:

  • 7 полезных репозиториев GitHub для JS-программистов
  • Как найти три наибольших числа в JavaScript
  • Алгоритм JavaScript: Array.forEach()

Читайте нас в Telegram, VK и Дзен

Дата и время в JavaScript

JavaScript определяет класс Date для представления и оперирования числами с целью отображения даты и времени.

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

Результат работы конструктора Date() зависит от переданных ему аргументов.

Например:

  1. Конструктор без аргумента (Date()) выдает текущее время.
  2. Конструктор с одним аргументом (Date(milliseconds)) интерпретирует этот аргумент как количество миллисекунд, прошедших с 1970 года.
  3. Конструктор с двумя и более аргументами (Date(year, month, day, hours, minutes, seconds, milliseconds)) интерпретирует эти аргументы как год, месяц, день месяца, час, минуту, секунду и миллисекунду по местному часовому поясу.

В API Date первый месяц года обозначается как 0, а первый день месяца  —  как 1.

Конструктор Date() интерпретирует аргументы, используя часовой пояс локального компьютера.

На компьютере автора установлено индийское стандартное время, поэтому даты и время в этой статье интерпретируются по индийскому стандартному времени.

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

Пример: добавление часового пояса UTC (универсальное скоординированное по Гринвичу время).

Date.UTC() принимает те же аргументы, что и конструктор Date(), интерпретирует их в UTC и возвращает миллисекундную метку времени, которую можно передать конструктору Date(). По умолчанию результаты будут отображаться в часовом поясе локального компьютера. Чтобы отобразить дату в UTC, необходимо применить toString(), toUTCString() или toISOString().

Отображение даты в локальном часовом поясеОтображение даты после передачи в форматах toString(), toUTCString() или toISOString()

Date-методы в JavaScript

Методы get и set используются для запроса и изменения в объекте

Date полей year, month, day-of-month, hours, minutes, seconds и milliseconds.

Эти методы применяются двумя способами: по местному времени и по UTC.

  1. Метод get помогает получить полный год (FullYear) в Date-объекте:
  • getFullYear();
  • getUTCFullYear().

2. Метод set помогает установить полный год (FullYear) в Date-объекте:

  • setFullYear();
  • setUTCFullYear()
    .

Для получения и установки других Date-полей необходимо заменить вышеупомянутые методы get и set ‘FullYear’ на имя конкретного поля (например, getMonth, getUTCMonth, setMonth, setUTCMonth).

Методы set для Date-объектаМетоды get для Date-объекта

Примечание. Методы для запроса:

  • дня месяца — — → getDate() и getUTCDate();
  • дня недели (от 0 для воскресенья до 6 для субботы) — — → getDay()
    и getUTCDay(). Дни недели доступны в режиме “только для чтения”, так что не существует метода setDay().
Методы getDate() и getDay()

Временные метки

JavaScript по умолчанию представляет даты как целые числа, которые указывают количество миллисекунд, прошедших с (или до) полуночи 1 января 1970 года по UTC. Это называется временными метками. Статический метод Date.now() возвращает текущее время в виде временной метки.

Форматирование и разбор Date-строк

В классе Date применяются следующие методы форматирования строк.

  • toString()  —  использует местный часовой пояс, но не форматирует дату и время с учетом локали.
  • toUTCString()  —  использует часовой пояс UTC, но не форматирует дату с учетом локали.
  • toISOString()  —  выводит дату и время в стандартном формате “year-month-day hours:minutes:seconds.ms” (по стандарту ISO-8601). Буква “T” отделяет часть вывода даты от части вывода времени.
    Время выражается в UTC, что обозначается буквой “Z” в качестве последней буквы вывода.
  • toLocaleString()  —  использует местный часовой пояс и формат, соответствующий локали пользователя.
  • toDateString()  —  форматирует только часть даты и опускает время. Этот метод использует локальный часовой пояс и не выполняет форматирование, соответствующее локали.
  • toLocaleDateString()  —  форматирует только дату. Этот метод использует местный часовой пояс и формат даты, соответствующий локали.
  • toTimeString()  —  форматирует только время и опускает дату. Этот метод использует местный часовой пояс, но не форматирует время в соответствии с локалью.
  • toLocaleTimeString()  —  форматирует время с учетом локали и использует местный часовой пояс.
Примеры форматирования Date-строк

В объекте Date существует статический метод parse(), который принимает в качестве аргумента строковое представление даты и возвращает временную метку, представляющую дату с 1 января 1970 года 00:00:00 UTC или NaN, если строка не распознана или не имеет подходящих значений даты.

Примеры использования метода parse()

Читайте также:

  • 7 полезных репозиториев GitHub для JS-программистов
  • Как найти три наибольших числа в JavaScript
  • Алгоритм JavaScript: Array.forEach()

Читайте нас в Telegram, VK и Дзен


Перевод статьи Tharmi Vijayakumaran: JavaScript Dates and Times

Читайте также

Temporal API — новый подход к управлению датой и временем в JS. Вот почему существуют другие библиотеки, такие как moment.js и date-fns. Разработчики используют их, чтобы понять объект Date. Реализация объекта Date была напрямую скопирована с Java. Java выбросил его, но он остался в JavaScript для обратной совместимости. Написано давно и не обновлялось. Есть некоторые основные проблемы с текущей реализацией Date.

  • Поддерживает только UTC и локальный часовой пояс пользователя
  • Объект Date является изменчивым: дата будет меняться по мере применения методов
  • Ненадежный анализ дат из строк
  • Нет поддержки негригорианских календарей
  • Неуклюжие API вычислений

Шаги, которые мы рассмотрим:

  • Что такое Temporal API?
  • Настройка проекта
  • Типы данных Temporal API
    • Temporal. Now
    • Temporal.PlainDate
    • Temporal.Duration
    • Temporal.TimeZone
  • Браузерная поддержка Temporal API

Что такое Temporal API?​

Temporal API, лучшая замена объекта Date. Temporal представляет стандартные типы данных и методы для работы с датами и временем. Это позволяет вам иметь простой в использовании API для вычислений даты и времени. Он обеспечивает поддержку всех часовых поясов без необходимости использования другой библиотеки, такой как date-fns. Это способ улучшить API даты/времени в JavaScript. Он предоставляет объекты PlainDate, PlainTime и PlainDateTime, которые не связаны с часовым поясом. Также есть способ получить время, связанное с часовым поясом. Он предоставляет инструменты для работы с часовыми поясами или без них. Таким образом, Temporal предоставляет типы данных, которые делятся на обычные и зонированные.

Temporal решает эти проблемы следующим образом:

  • Первоклассная поддержка для всех часовых поясов
  • Обработка объектов, доступных с фиксированными датами и временем
  • Обеспечение надежности за счет анализа строгого строкового формата
  • Поддержка негригорианских календарей
  • Дата и вычисления времени, предоставляя простые API

В Temporal доступно несколько типов данных и методов, и мы рассмотрим большинство из них в этом руководстве.

Настройка проекта

Мы создадим очень простой проект.

Создайте пустой каталог для нового проекта Temporal API .

 mkdirtemporal-api 
cdtemporal-api

Чтобы начать работу с Temporal API , сначала необходимо установить следующий пакет: вы добавляете Snowpack в качестве зависимости от разработчиков.

 npm install --save-dev снежный покров 

Создайте файлtemporal.js и включите его в качестве источника в файл index.html для тестирования Temporal API.

index.html

  





Temporal API





Импортируйте следующий пакет в файл Temporal. js , и вы готовы начать работу с Temporal API .

temporal.js

 import { Temporal } from '@js-temporal/polyfill'; 

Теперь мы можем проверить консоль браузера при тестировании следующих случаев.


Встречайте безголовое решение на основе React для создания стильного CRUD

приложения. Благодаря уточнению вы можете быть уверены, что ваша кодовая база всегда будет оставаться чистой и свободной от шаблонов.

Попробуйте уточнить, чтобы быстро создать свой следующий проект CRUD , будь то панель администратора, информационная панель, внутренний инструмент или витрина магазина.



Типы данных Temporal API

Temporal.Now

Это даст вам набор различных методов, которые позволят вам получить объект в текущее время. Допустим, вы хотите получить простую дату и время:

 const now = Temporal.Now.plainDateTimeISO() 
console.
log(now.toString())
// 2022-08-15T17:26:43.63340363

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

 const nowDate = Temporal.Now.plainDateISO() 
const nowTime = Temporal.Now.plainTimeISO()

console.log(nowDate.toString())
// 2022-08-15
console.log(nowTime.toString())
// 17:27:51.688660566

Добавление даты, месяца или года с использованием старых методов Date — огромная проблема. В Temporal это сделать очень просто.

 const now = Temporal.Now.plainDateISO() 

console.log(now.add({ дни: 1, месяцы: 1, годы: 1 }).toString())
// 2023-09-16

Вы также можете выполнять вычитание следующим образом:

 const now = Temporal.Now.plainDateISO() 
console.log(now.subtract({ дни: 1, месяцы: 1, годы: 1 }).toString())
// 2021-07-14

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

 const now = Temporal.Now.plainDateISO() 
const now2 = Temporal.Now.plainDateISO()

console .log(now.equals(now2))
// true

Если вы хотите рассчитать продолжительность между двумя датами, вы можете сделать это следующим образом:

 const now = Temporal.Now.plainDateISO() 
const now2 = new Temporal.PlainDate(2022,1,1)

console.log(now.since(now2).toString())
// P226D
консоль. log(now.until(now2).toString())
// -P226D

Оба вспомогательных метода с и до помогают найти продолжительность между двумя датами. Вспомогательный метод с позволяет установить конкретное значение. Например:

 const now = Temporal.Now.plainDateISO() 

console.log(now.with({ year: 2021 }).toString())
// 2021-08-15

Если вы хотите узнать больше о вспомогательных методах, вы можете проверить Temporal Docs.

Таким образом, на основе этих различных типов planeDate, plainTime и plainDateTime можно получить очень конкретную информацию. Кроме того, если вы заботитесь о часовых поясах, вы можете сделать следующее для определенного часового пояса по вашему выбору.

 const now = Temporal.Now.zonedDateTimeISO() 

console.log(now.toString())
// 2022-08-15T17:37:00.986020984+05:00[Азия/Карачи]

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


Temporal.PlainDate​

Если вы хотите получить точную дату без времени, Вы можете сделать это:

 const now = new Temporal.PlainDate(2022,8,8) 

console.log(now.toString())
// 2022-08-08

Другой способ получить дату — вызвать метод вызывается из :

 const now = Temporal. PlainDate.from("2022-08-08") 

console.log(now.toString())
// 2022-08-08

Вы также можете пройти объект в методе из . Вы получите точно такой же результат.

 const сейчас = Temporal.PlainDate.from({ 
год: 2022,
месяц: 8,
день: 8
})

console.log(now.toString())
// 2022-08-08

Все это позволяет вам определить дату, время , или что-то еще. Это возможно и для всех часовых поясов. Вы можете сделать зонированное время и дату следующим образом:

 const now = Temporal.ZonedDateTime.from({
год: 2022,
месяц: 8,
день: 8,
timeZone: Temporal.Now.timeZone()
} )

console.log(now.toString())
// 2022-08-08T00:00:00+05:00[Азия/Карачи]

Вы получите год, месяц и день в вашем конкретном часовом поясе, потому что вы упомянули об этом. Это часть основных типов данных, которые вы собираетесь использовать. Если вы хотите отсортировать даты, вы можете сделать так:

 const Today = Temporal. Now.plainDateISO() 
const Вчера = Today.subtract({ days: 1})
const Завтра = Today.add ({ days: 1})
const days = [сегодня, вчера, завтра]
const sortedDays = days.sort(Temporal.PlainDate.compare)

console.log(sortedDays.map(d => d.toString()))
//  ['2022-08-14', '2022-08-15', '2022-08-16']

Temporal.Duration​

Этот тип данных передает длину или продолжительность времени. Это помогает при сравнении дат. Вы можете построить новый Duration с помощью конструктора или из метода .

 const duration = Temporal.Duration.from({ days: 2, month: 8 }) 

console.log(duration.toString())
// P8M2D

Вы можете использовать раунд , с , вычесть или добавить вспомогательных метода на Длительность . total Вспомогательный метод вычисляет всю продолжительность в определенной единице.

 const duration = Temporal. Duration.from({ часы: 12, минуты: 30 }) 

console.log(duration.total("минуты"))
// 750

Temporal.TimeZone​

Эти данные тип используется для отображения определенного часового пояса. Вы можете использовать это двумя способами:

 const timeZone = Temporal.TimeZone.from('America/Chicago') 

console.log(timeZone.toString())
// Америка/Чикаго

const localTimeZone = Temporal.Now.timeZone()

console.log(localTimeZone.toString())
// Азия/Карачи

Существуют различные типы данных и вспомогательные методы, доступные с Temporal . Если вы хотите изучить их, вы можете сделать это через Temporal Docs.

Браузерная поддержка Temporal API0081 Временный API

. Этот API еще недоступен, так как предложение по этому API находится на этапе 3. В настоящее время ни один браузер не поддерживает этот API, но вы можете использовать полифилл, если хотите попробовать этот API. Для этого API доступно несколько полифиллов, но @js-temporal/polyfill весьма полезен. Вы можете сразу же использовать этот API, как только установите эту библиотеку.

Заключение​

Dates в JavaScript включают несколько проблем с реализацией. Temporal API решает эту проблему с помощью простых в использовании API. Разработчики JavaScript сочтут это полезным, как только браузеры начнут поддерживать этот API.


Теги:

javascript

Тест JS: 14 вопросов о дате и времени в JavaScript

  • Подтвердите свои навыки JavaScriptz! 🚀
  • Вход или регистрация не требуются. ✨
  • Множественный выбор. 🤖 … Как это может быть сложно, а?

Outline

Класс Date в JavaScript имеет общеизвестно сложный API. Он был унаследован от Java…

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

Этот тест предназначен для проверки (и углубления) ваших знаний о родном API Date . Используйте зеленые кнопки для подсказок и объяснений! Надеюсь, к концу задания вы укрепите свое понимание Date в JavaScript.

Если вы застряли

  1. Прочитайте подсказки (Зеленая кнопка, нижний правый угол). Некоторые содержат несколько анимированных ответов с подробными аннотациями, в то время как другие предлагают лишь несколько подсказок. Я не могу так просто дать все ответы!
    Серьезно, это намеренно, ответы есть. Пропустите или попробуйте фрагменты кода, затем измените его и поиграйте еще.
  2. Попробуйте код в консоли браузера (попробуйте сочетание клавиш F12 в Windows или Command + Option + J на Mac).
  3. Пожалуйста, напишите мне в Твиттере @justsml. Буду рад услышать ваше мнение!

ПРИМЕЧАНИЕ. Предположим, что все примеры выполняются со смещением часового пояса GMT-7.
Загрузка…

Еще несколько секунд…
 const d1 = новая Дата(2020, 1, 1)
console. log(d1) 

Что будет включать вывод?

  • 01 января 2020
  • 01 февраля 2020 г.
  • RangeError: недопустимый аргумент.

Аргумент Месяц отсчитывается от нуля. В диапазоне от 0 до 11 (по западному календарю)

«Февраль» имеет значение индекса, равное единице. (Думайте об этом как о поиске в массиве.)

 const d2 = новая дата (2020, 0, 1)
console.log(d2) 

Что будет включать вывод?

  • 01 января 2020
  • 01 февраля 2020 г.
  • RangeError: недопустимый аргумент.

Аргумент Месяц отсчитывается от нуля. В диапазоне от 0 до 11 (по западному календарю)

«Январь» имеет значение индекса, равное нулю. (Думайте об этом как о поиске в массиве.)

 const d3 = Дата («Чт, 01 января 1970 г., 00:00:00 по Гринвичу»)
console.log(d3) 

Что будет включать вывод?

  • 01 января 1970 г.
  • Unix Эпоха 0
  • Текущая дата в формате UTC/GMT
  • Текущая дата
  • НаН

Это распространенная ошибка которую легко не заметить даже при просмотре кода.

Экземпляр Date , созданный с помощью Date([args]) , всегда будет возвращать сегодняшнюю дату. Другими словами, аргументы игнорируются. Date('blah') является псевдонимом для new Date() .

Недостающая часть — новое ключевое слово : новая дата (строка даты) .

Предположим, что все примеры выполняются со смещением часового пояса GMT-7.

 const d1 = новая дата('2020-01-01')
const d2 = новая дата('2020-01-01T00:00')
console.log(d1.getFullYear(), d2.getFullYear()) 

Какое значение будет выведено на консоль?

  • 2019 2020
  • 2020 2021
  • 2020 2020
  • 2020 2019

Конструктор Date анализирует строки даты, используя либо UTC/GMT, либо местное время.

Хитрость заключается в том, чтобы знать, будет ли использоваться ваш местный часовой пояс… T00:00 заставляет использовать время UTC/GMT.

Учитывая следующую дату…

 const date = new Date('2020-01-01T00:00') 

Выберите

неверный метод форматирования :
  • date.toLocaleFormat(‘en-US’, { часовой пояс: ‘UTC’, timeZoneName: ‘short’})
  • date.toLocaleDateString(‘en-US’, { timeZone: ‘UTC’, timeZoneName: ‘short’})
  • date.toLocaleTimeString(‘en-GB’, {часовой пояс: ‘UTC’})
  • новый Intl.DateTimeFormat(‘en-US’).format(дата)

Метод Date.toLocaleFormat() не является стандартным или не поддерживается должным образом.

Прежде чем обращаться к сторонней библиотеке, я предпочитаю использовать собственный метод toLocaleDateString . Его поведение задокументировано под Intl.DateTimeFormat .

 константная дата = новая дата (2020)
console.log(date.getFullYear()) 

Что будет включать вывод?

  • 1969
  • 1970
  • 2019
  • 2020
  • 2021

Экземпляр Date не может быть создан с одним целым числом в качестве аргумента. Он недействителен и по умолчанию будет равен началу «компьютерного времени» (миллисекунды с 1 января 1970 года). год без смещения часового пояса (для этих вопросов предполагается GMT-7.)

Вы не заметите этот эффект, если вы живете в GMT-0 (или больше, чем GMT+1).

 переменная дата = новая дата (дата.UTC (2020, 0, 1))
console.log(date.getUTCFullYear(), date.getFullYear()
) 

Что будет включать вывод?

  • 2020 2020
  • 2020 2019
  • 2019 2020
  • 2019 2019

Метод getFullYear() основан на локальном смещении GMT-07:00. Это означает, что он даст предыдущий год, поскольку дата представлена ​​​​локально 31 декабря 2019 17:00:00 .

 const d = Дата.UTC(2020, 0, 1)
console.log(d) 

Что будет включать вывод?

  • Экземпляр даты в формате UTC
  • Экземпляр даты с поправкой на местный часовой пояс
  • миллисекунд с 1 января 1970 года
  • Ошибка

Вспомогательный метод Date. UTC не возвращает экземпляр даты. Возвращает целое число в миллисекундах.

 // Предположим, что местная TZ -07:00
const d = новая Дата(Дата.UTC(2020, 0, 1
))
console.log(d.getTimezoneOffset()) 

Что будет включать вывод?

  • 0
  • 420
  • 700
  • 1400
  • ноль

Даты будут неявно представлены по местному времени с неизменным .getTimezoneOffset() .

Экземпляры даты не хранят «исходные» данные часового пояса. Экземпляры даты по существу хранят только # миллисекунд с эпохи Unix (1 января 1970 г.). Часовой пояс учитывается при анализе строки даты. А поведение дисплея по умолчанию определяется автоматически на основе региональных настроек системы или браузера.

 const d = новая дата (2020, 0, 1)
d.setDate(1)
console.log(d) 

Что будет включать вывод?

  • 01 января 2020
  • 01 февраля 2020 г.
  • RangeError: недопустимый аргумент.
`setDate` устанавливает день месяца, обычно в диапазоне 1-31.

Метод .setDate() устанавливает день месяца на основе текущего месяца данного экземпляра.

Если указано значение, выходящее за пределы доступного количества дней, значение месяца экземпляра даты будет скорректировано (например, A setDate(32) в январе будет считаться как 1 февраля.)

 const d = новая дата (2020, 0, 1)
d.setDate (0)
console.log(d) 

Что будет включать вывод?

  • 01 января 2020
  • 00 января 2020
  • 01 февраля 2020 г.
  • 31 декабря 2019 г.
  • RangeError: недопустимый аргумент.
`setDate` устанавливает день месяца, обычно в диапазоне 1-31.

Метод setDate устанавливает день месяца на основе текущего месяца данного экземпляра.

Если вы вызовете setDate(0) , экземпляр даты будет настроен на последний день предыдущего месяца.

 const d = новая дата (2020, 0, 1)
d.setDate(32)
console.log(d) 

Что будет включать вывод?

  • 01 января 2020
  • 32 января 2020 г.
  • 01 февраля 2020 г.
  • RangeError: недопустимый аргумент.
`setDate` устанавливает день месяца, обычно в диапазоне от 1 до 31. Отрицательные числа и любые числа больше `31` вызывают корректировку дня и месяца, иногда неожиданным образом.

Если для setDate задано положительное целое число за пределами доступного количества дней, месяц и день экземпляра даты будут скорректированы по мере необходимости. (например, setDate(32) в январе будет рассчитываться как 1 февраля.)

 const d = новая дата (2020, 1, 1)
d.setDate(100)
console.log(d) 
  • 01 января 2020
  • 01 февраля 2020 г.
  • 01 мая 2020 г.
  • 10 мая 2020 г.
  • RangeError: недопустимый аргумент.

Подсказка: Установка даты с помощью setDate(X) — это не то же самое, что добавление X дней.