Тест:14 вопросов о JavaScript Date
Научись впечатлять гостейJS‑викторинами! ✨
Насколько хорошо вы знаете класс Date?
- Докажите своё мастерство в JavaScript! 🚀
- Регистрация не требуется. ✨
- Выбор из нескольких вариантов. 🤖 … Насколько это может быть сложным, а?
План
Класс Date в JavaScript известен своей коварной API. Он унаследован из Java, а, вероятно, вдохновлён древними неолитическими методами измерения времени.
Борьба с Date заставляет многих разработчиков без вопросов обращаться к сторонним библиотекам. Хотя это часто безопасный и надёжный выбор, такие библиотеки редко нужны для простого форматирования дат или локализации!
Этот тест создан, чтобы проверить (и углубить) ваши знания нативного API Date. Используйте зелёные кнопки для подсказок и объяснений! К концу задания вы, надеемся, укрепите понимание работы Date в JavaScript.
ПРИМЕЧАНИЕ: Предполагается, что все примеры работают в локальном часовом поясе GMT‑7.
👇 14 вопросов ниже 👇
Что будет включено в вывод?
const d1 = new Date(2020, 1, 1)console.log(d1)Аргумент month начинается с нуля. Диапазон 0‑11 (для западных календарей).
‘February’ имеет индекс 1. (Думайте об этом как о поиске в массиве.)
Что будет включено в вывод?
const d2 = new Date(2020, 0, 1)console.log(d2)Аргумент month считается с нуля. Диапазон — 0‑11 (для западных календарей).
‘January’ имеет индекс 0. (Это как поиск в массиве.)
Что будет включено в вывод?
const d3 = Date('Thu, 01 Jan 1970 00:00:00 GMT')console.log(d3)Не забудьте ключевое слово new! Date — это класс, его нужно вызывать с new.
Date('...') без new игнорирует переданное значение. Похоже, что он всегда возвращает текущие дату и время, как new Date() (без аргументов).
Это распространённый подводный камень, который легко упустить, даже при ревью кода.
Что будет включено в вывод?
const date = new Date(2020)console.log(date.getFullYear())Экземпляр Date, созданный с единственным целочисленным аргументом, интерпретируется как значение Unix Epoch. Epoch — это количество миллисекунд, прошедших с 1 янв 1970 года.
Значение 2020 (миллисекунд) соответствует 2 секундам после 1 янв 1970 года.
Поскольку наш локальный часовой пояс имеет отрицательное смещение ‑7 часов, получаем Wed Dec 31 1969 17:00:02 GMT-0700 (Mountain Standard Time).
Можно обойти смещение локального часового пояса, используя .getUTCFullYear().
Какое значение будет выведено в консоль?
const d1 = new Date('2020-01-01')const d2 = new Date('2020-01-01T00:00')console.log(d1.getFullYear(), d2.getFullYear())Строка без значения времени T может выглядеть как Jan 1st, 2020 - но строки, содержащие только дату, интерпретируются как UTC, и при переводе в наш локальный часовой пояс (GMT-7) мы всё ещё находимся в 2019.
Строки даты и времени без явного часового пояса интерпретируются в локальном времени.
Формат T00:00 заставляет второе значение интерпретировать как полночь локального времени.
Первая дата интерпретируется как Tue Dec 31 2019 17:00:00 GMT-0700 (Mountain Standard Time).
Вторая дата интерпретируется как Wed Jan 01 2020 00:00:00 GMT-0700 (Mountain Standard Time).
Выберите неправильный метод форматирования:
Метод toLocaleFormat() не является стандартным! Он может выглядеть знакомо, потому что пришёл из древней сторонней библиотеки.
Ознакомьтесь с toLocaleDateString docs методом. Его поведение задокументировано в Intl.DateTimeFormat.
Что будет включено в вывод?
var date = Date.UTC('2020-01-02T00:00')console.log(date.toUTCString())Вы получите TypeError: date.toUTCString is not a function, поскольку Date.UTC() возвращает целое число в миллисекундах, а не экземпляр даты.
Что будет включено в вывод?
const d = Date.UTC(2020, 0, 1)console.log(d)Вспомогательный метод Date.UTC не возвращает экземпляр даты. Он возвращает целое число в миллисекундах.
Что будет включено в вывод?
// Assume local TZ is -07:00const d = new Date(Date.UTC(2020, 0, 1))console.log(d.getTimezoneOffset())Дата будет неявно представлена в локальном времени, с (по‑сути) неизменным .getTimezoneOffset().
Date‑объекты не хранят данные о часовом поясе. Они хранят количество миллисекунд, прошедших с эпохи Unix (1 янв 1970). Часовой пояс учитывается при разборе и выводе строк даты. Поведение по умолчанию определяется автоматически на основе настроек локали системы или браузера.
Что будет включено в вывод?
const d = new Date(2020, 0, 1)d.setDate(1)console.log(d)Метод .setDate() устанавливает день месяца, исходя из текущего месяца данного экземпляра.
Если передать значение, выходящее за пределы количества дней в месяце, значение месяца будет скорректировано (например, setDate(32) в январе будет вычислено как 1 февраля.)
Что будет включено в вывод?
const d = new Date(2020, 0, 1)d.setMonth(1)console.log(d)Метод .setMonth() задает месяц указанного экземпляра даты.
Аргумент month считается с нуля и имеет диапазон 0‑11 (для западных календарей.)
Что будет включать вывод?
const d = new Date(2020, 0, 1)d.setMonth(12)console.log(d)Метод .setMonth() задаёт месяц у указанного экземпляра даты.
Аргумент month считается с нуля, диапазон значений — 0‑11 (для западных календарей).
Здесь мы видим, что год меняется на 2021, потому что setMonth(12) на 1 больше, чем 11 (декабрь).
Что будет включено в вывод?
const d = new Date(2020, 0, 1)d.setMonth(13)console.log(d)Метод .setMonth() устанавливает месяц у указанного экземпляра даты.
Аргумент month считается с нуля, диапазон 0‑11 (для западных календарей).
Здесь мы видим, что месяц и год скорректированы до февраля 2021 года, потому что setMonth(13) на 2 больше 11 (декабря).
Что будет включать вывод?
const d = new Date(2020, 0, 1)d.setMonth(-1)console.log(d)Метод .setMonth()([https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth]) устанавливает месяц указанного экземпляра даты.
Аргумент месяца считается с нуля и может принимать значения от 0 до 11 (по западному календарю).
Здесь мы видим, как месяц и год откатываются к декабрю 2019 года, потому что setMonth(-1) меньше 0 (январь).