Конструктор Date()
Конструктор Date()
(дата) створює об'єкти Date
. Коли його викликати як функцію, він повертає рядок, що представляє поточний час.
Спробуйте його в дії
Синтаксис
new Date()
new Date(value)
new Date(dateString)
new Date(dateObject)
new Date(year, monthIndex)
new Date(year, monthIndex, day)
new Date(year, monthIndex, day, hours)
new Date(year, monthIndex, day, hours, minutes)
new Date(year, monthIndex, day, hours, minutes, seconds)
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)
Date()
Примітка:
Date()
можна викликати як з, так і безnew
, але з різними наслідками. Дивіться Повернене значення.
Параметри
Є п'ять базових форм виклику конструктора Date()
:
Без параметрів
Коли не надані жодні параметри, новостворений об'єкт Date
представляє поточні дату й час на мить свого створення. Мітка часу поверненої дати – така сама, як число, повернене Date.now()
.
Значення часу або мітка часу
value
Значення – ціле число, що представляє мітку часу (число мілісекунд від півночі на початку 1 січня 1970 року за Всесвітнім координованим часом – також відоме як епоха).
Рядок дати
dateString
Рядкове значення, що представляє дату і розбирається та тлумачиться згідно з тим самим форматом, що реалізований
Date.parse()
. Застереження щодо використання різних форматів дивіться в форматі рядків дати й часу.
Об'єкт Date
dateObject
Наявний об'єкт
Date
. Фактично створюється копія наявного об'єктаDate
, з такими ж датою й часом. Це рівносильноnew Date(dateObject.valueOf())
, окрім того, що методvalueOf()
не викликається.
Коли в Date()
передається один параметр, примірники Date
обробляються по-особливому. Всі решта значень перетворюються на примітиви. Якщо результат є рядком, то він розбирається як рядок дати. Інакше – результівний примітив далі зводиться до числа й обробляється як мітка часу.
Значення окремих компонент дати й часу
Отримавши принаймні рік та місяць, ця форма Date()
повертає об'єкт Date
, чиї значення компонент (рік, місяць, день, година, хвилина, секунда й мілісекунда) походять від наступних параметрів. Усі відсутні поля отримують найменше можливе значення (1
для day
і 0
для решти компонент). Значення параметрів обчислюються відносно місцевого часового поясу, а не Всесвітнього координованого часу. Date.UTC()
приймає подібні параметри, але тлумачить компоненти як Всесвітній координований час (UTC), а повертає – мітку часу.
Якщо будь-який параметр переповнює свої визначені межі, він "переноситься". Наприклад, якщо переданий monthIndex
, більший за 11
, то це змусить рік збільшитись на одиницю; якщо переданий minutes
більший за 59
, то відповідно збільшиться hours
тощо. Таким чином, new Date(1990, 12, 1)
поверне 1 січня 1991 року; new Date(2020, 5, 19, 25, 65)
поверне 2:05 20 червня 2020 року.
Аналогічно, якщо якийсь параметр нижчий меж допустимих значень, він "запозичує" з вищих позицій. Наприклад, new Date(2020, 5, 0)
поверне 31 травня 2020 року.
year
Ціле число, що представляє рік. Значення від
0
до99
відповідають рокам від1900
до1999
. Всі решта значень тотожні відповідним рокам. Дивіться приклад.monthIndex
Ціле число, що представляє місяць, починаючи від
0
для січня і до11
для грудня.day
Необов'язковеЦіле число, що представляє день місяця. Усталено –
1
.hours
Необов'язковеЦіле число між
0
і23
, що представляє годину дня. Усталено –0
.minutes
Необов'язковеЦіле число, що представляє хвилинний сегмент миті часу. Усталено –
0
.seconds
Необов'язковеЦіле число, що представляє секундний сегмент миті часу. Усталено –
0
.milliseconds
Необов'язковеЦіле число, що представляє мілісекундний сегмент миті часу. Усталено –
0
.
Повернене значення
Виклик new Date()
(конструктора Date()
) повертає об'єкт Date
. Якщо викликати його з недійсним рядком часу, або якщо дата матиме мітку часу UNIX, меншу за -8,640,000,000,000,000
або більшу за 8,640,000,000,000,000
мілісекунд, то він поверне недійсну дату (об'єкт Date
, чий метод toString()
повертає "Invalid Date"
, а метод valueOf()
повертає NaN
).
Виклик функції Date()
(без ключового слова new
) повертає рядкове представлення поточних дати та часу, точно так само, як це робить new Date().toString()
. Будь-які аргументи, передані при виклику функції Date()
(без ключового слова new
) ігноруються; незалежно від того, чи була вона викликана з недійсним рядком дати – або навіть з будь-яким довільним об'єктом чи іншим примітивом як аргументом – вона завжди повертає рядкове представлення поточних дати й часу.
Опис
Знижена точність часу
Для забезпечення захисту від часових атак і створення цифрових відбитків, точні значення new Date()
можуть заокруглюватись залежно від налаштувань браузера. Наприклад, у Firefox опція privacy.reduceTimerPrecision
— усталено ввімкнена й усталено дорівнює 2 мс у Firefox. Також можна увімкнути privacy.resistFingerprinting
, і в цьому випадку точність дорівнюватиме 100 мс або значенню privacy.resistFingerprinting.reduceTimerPrecision.microseconds
— залежно від того, яке з цих значень більше.
Наприклад, за зниженої точності значення часу результат new Date().getTime()
завжди буде кратним 2 та буде кратним 100 (або privacy.resistFingerprinting.reduceTimerPrecision.microseconds
), коли ввімкнено privacy.resistFingerprinting
.
// знижена точність часу (2мс) у Firefox 60
new Date().getTime();
// Може бути:
// 1519211809934
// 1519211810362
// 1519211811670
// …
// знижена точність часу з увімкненою опцією `privacy.resistFingerprinting`
new Date().getTime();
// Може бути:
// 1519129853500
// 1519129858900
// 1519129864400
// …
Приклади
Декілька способів створити об'єкт Date
Наступні приклади демонструють декілька способів створити об'єкт дати JavaScript:
const today = new Date();
const birthday = new Date("December 17, 1995 03:24:00"); // КРАЩЕ НЕ ТРЕБА: може працювати не у всіх середовищах виконання
const birthday = new Date("1995-12-17T03:24:00"); // Стандартизований і надійний спосіб
const birthday = new Date(1995, 11, 17); // місяці нумеруються від 0
const birthday = new Date(1995, 11, 17, 3, 24, 0);
const birthday = new Date(628021800000); // передача мітки часу епохи
Передача значення, що не є ані Date, ані рядком, ані числом
Якщо конструктор Date()
викликається з одним параметром, що не є примірником Date
, цей параметр буде зведений до примітива, а потім буде перевірено, чи є цей примітив рядком. Наприклад, new Date(undefined)
– не те саме, що new Date()
:
console.log(new Date(undefined)); // Invalid Date
Річ у тому, що undefined
– це примітив, але не рядок, тому це значення зводиться до числа, тобто NaN
, а отже – не є дійсною міткою часу. З іншого боку, null
зводиться до 0
.
console.log(new Date(null)); // 1970-01-01T00:00:00.000Z
Масиви зводяться до рядка за допомогою Array.prototype.toString()
, котрий склеює елементи комами. Проте результівний рядок будь-якого масиву, в котрому більш ніж один елемент, не є дійсним рядком дати ISO 8601, тож логіка його розбору залежить від реалізації. Не слід передавати в конструктор Date()
масиви.
console.log(new Date(["2020-06-19", "17:13"]));
// 2020-06-19T17:13:00.000Z у Chrome, адже він розуміє "2020-06-19,17:13"
// "Invalid Date" у Firefox
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Date() constructor
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |