Date

Створює примірник класу Date, що позначає певну мить у часі. В об'єктах Date час зберігається як число мілісекунд від 1 січня 1970 року (00:00:00 за UTC).

Синтаксис

new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hours[, minutes[, seconds[, milliseconds]]]]]);

Заувага: Об'єкт Date можна створити лише викликом Date як конструктора (з використанням оператора new). Натомість виклик Date як звичайної функції повертає рядок. На відміну від деяких інших типів, для Date літералів не існує.

Параметри

Заувага: Якщо конструктор Date викликано з більш як одним аргументом, а значення одного чи декількох вказаних складників виходить за прийнятні межі (скажімо, вказано 13-й місяць чи 70 хвилин), буде скориговано суміжні складники. Себто виклик new Date(2013, 13, 1) є тотожним до new Date(2014, 1, 1) і так само відповідає даті 2014-02-01 (завважте, що лік місяців починається від нуля). Те саме стосується інших значень: виразам new Date(2013, 2, 1, 0, 70) та new Date(2013, 2, 1, 1, 10) однаково відповідає дата 2013-03-01T01:10:00.

Заувага: Якщо конструктор Date викликано з більш як одним аргументом, передані аргументи позначатимуть місцевий час. Якщо треба вказати час за UTC, скористайтеся виразом new Date(Date.UTC(…)), передавши до Date.UTC() ті самі аргументи.

value
Ціле число, що вказує кількість мілісекунд з 1 січня 1970 року 00:00:00 за UTC без врахування високосних секунд. Це те саме, що час Unix, але зважайте на те, що більшість функцій часу й дати Unix рахують у секундах.
dateString
Рядок, що вказує дату й час. Має бути у форматі, що розпізнається методом Date.parse() (IETF-compliant RFC 2822 timestamps, і також різновид ISO8601).

Заувага: Розбір рядків з датою (часом) за допомогою конструктора Date (або метода Date.parse, що є одне й те саме) є рішуче небажаним через наявні розбіжності поміж переглядачами. Рядки формату RFC 2822 підтримуються лише за неформальною домовленістю. А розбіжність у підтримці рядків формату ISO 8601 полягає в тому, що запис дати без часу (як-от «1970-01-01») може тлумачитися як час за UTC, а не місцевий.

year
Ціле число, що позначає рік. Значення від 0 до 99 позначають роки з 1900 до 1999. Дивіться приклад.
month Optional
Ціле число, що позначає місяць. Лік починається від нуля (січень — 0, а грудень — 11).
day Optional
Ціле число, що позначає день місяця. Лік починається з одиниці.
hours Optional
Ціле число, що позначає годину доби.
minutes Optional
Ціле число, що позначає хвилини.
seconds Optional
Ціле число, що позначає секунди.
milliseconds Optional
Ціле число, що позначає мілісекунди.

Опис

  • Якщо конструктор викликано без аргументів, він створює об'єкт Date для поточної дати і часу відповідно до системних налаштувань.
  • Якщо вказано принаймні два аргументи, кожен з відсутніх отримає значення 0 (або 1, якщо це день місяця).
  • У JavaScript дата зберігається як числове значення — кількість мілісекунд між позначуваною миттю та північчю 1 січня 1970 року за UTC. День містить 86,400,000 мілісекунд. Межі для дат позначуваних об'єктом Date становлять 200 млн. днів — від -100,000,000 до +100,000,000 днів відносно півночі 1 січня 1970 року за UTC.
  • Поведінка об'єкта Date не залежить від платформи. Значення часу можна передавати між системами, а створені з нього об'єкти дати позначатимуть одну й ту саму мить у часі.
  • Об'єкт Date має окремі методи для підтримки UTC (всесвітній час) та місцевого часу. UTC (узгоджений всесвітній час) означає час встановлений світовим стандартом. Натомість місцевий час — це час того комп'ютера, на якому виконується код JavaScript.
  • Виклик Date як функції (замість створення примірника класу Date за допомогою оператора new) вертає рядок, що містить відповідну дату й час.

Заувага: Досить поширеним є хибне ототожнення UTC (узгоджений всесвітній час) із GMT (середній час за Гринвічем). Але, на відміну від UTC, GMT є певним часовим поясом. Хоча слід також зазначити, що ані перший, ані другий не переходять на літній час (DST).

Властивості

Date.prototype
Уможливлює додавання властивостей до об'єктів класу Date.
Date.length
Значення Date.length дорівнює 7. Це кількість параметрів конструктора.

Методи

Date.now()
Вертає ціле число, що позначає поточний час — кількість мілісекунд від 00:00:00 за UTC 1 січня 1970 року без врахування високосних секунд.
Date.parse()
Розбирає текстовий запис (рядок) із датою (часом) та повертає кількість мілісекунд між 00:00:00 за UTC 1 січня 1970 та зазначеною миттю у часі. Високосні секунди не враховуються.

Заувага: Розбір рядків з датою (часом) за допомогою метода Date.parse є рішуче небажаним через наявні розбіжності поміж переглядачами.

Date.UTC()
Приймає ті самі параметри, що й найдовша форма конструктора (від 2 до 7), та вертає кількість мілісекунд між 00:00:00 за UTC 1 січня 1970 року та зазначеною миттю у часі без врахування високосних секунд.

Примірники Date у JavaScript

Всі примірники класу Date успадковують Date.prototype. Якщо змінити прототип конструктора, це вплине на всі примірники класу Date.

Методи Date.prototype

Приклади

Кілька шляхів створення примірника Date

Заувага: Розбір рядків з датою (часом) за допомогою конструктора Date (або метода Date.parse, що є одне й те саме) є рішуче небажаним через наявні розбіжності поміж переглядачами.

Наведені приклади унаочнюють декілька шляхів створення об'єктів дати:

var today = new Date();
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);

Рік менший від сотні обертається на 1900-1999

Методи getYear() та setYear() (як і конструктор) тлумачать одно- та двоцифрові значення (від 0 до 99 включно) як рік двадцятого сторіччя. Якщо ж ви маєте на меті встановити (чи отримати) рік першого сторіччя (від Різдва Христового), скористайтеся натомість методами getFullYear() та setFullYear():

var date = new Date(98, 1);  // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

// Застарілий метод, тут 98 також обертається на 1998
date.setYear(98);            // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

date.setFullYear(98);        // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)

Обчислення тривалості

У наведених прикладах показано, як з'ясувати час (в мілісекундах), що розділяє дві дати у JavaScript.

Через різну тривалість доби (внаслідок переходів між літнім та зимовим часом), місяця та року вираження обчисленої тривалості в одиницях більших за годину є дещо ускладненим і потребує вдумливого дослідження.

Найпростіший спосіб за допомогою метода Date.now():

// Запам'ятаймо початок
var start = Date.now();

// Тут якісь обчислення, тривалість яких слід з'ясувати
doSomethingForALongTime();

// Запам'ятаймо кінець
var end = Date.now();

// Обчислімо тривалість — різницю між кінцем та початком (у мілісекундах)
var elapsed = end - start;

Тут майже те саме, але з використанням об'єктів класу Date та метода Date.prototype.getTime():

// Запам'ятаймо початок
var start = new Date();

// Тут якісь обчислення, тривалість яких слід з'ясувати
doSomethingForALongTime();

// Запам'ятаймо кінець
var end = new Date();

// Обчислімо тривалість — різницю між кінцем та початком (у мілісекундах)
var elapsed = end.getTime() - start.getTime();

В цьому прикладі функція evaluateFunctionDuration є посередником. Вона викликає передану їй функцію func, обчислює тривалість її виконання (виводить у консоль) та вертає те, що повернула func:

function evaluateFunctionDuration(func) {
  var begin = Date.now(),
      value = func(),
      end = Date.now();

  console.log('Тривалість: ' + (end - begin) + ' ms');
  return value;
}

var value = evaluateFunctionDuration(function() { … });

Заувага: В переглядачах з підтримкою часу високої роздільності Web Performance API, метод Performance.now() може забезпечити вищу точність та надійність вимірювання тривалості, ніж Date.now().

Специфікації

Специфікація Статус Коментар
ECMAScript (ECMA-262)
The definition of 'Date' in that specification.
Living Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Date' in that specification.
Standard  
ECMAScript 5.1 (ECMA-262)
The definition of 'Date' in that specification.
Standard  
ECMAScript 1st Edition (ECMA-262) Standard Первинне визначення. Запроваджено у JavaScript 1.1.

Підтримка веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Date() constructorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support