Створює примірник класу 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

Getter

Date.prototype.getDate()
Returns the day of the month (1-31) for the specified date according to local time.
Date.prototype.getDay()
Returns the day of the week (0-6) for the specified date according to local time.
Date.prototype.getFullYear()
Returns the year (4 digits for 4-digit years) of the specified date according to local time.
Date.prototype.getHours()
Returns the hour (0-23) in the specified date according to local time.
Date.prototype.getMilliseconds()
Returns the milliseconds (0-999) in the specified date according to local time.
Date.prototype.getMinutes()
Returns the minutes (0-59) in the specified date according to local time.
Date.prototype.getMonth()
Returns the month (0-11) in the specified date according to local time.
Date.prototype.getSeconds()
Returns the seconds (0-59) in the specified date according to local time.
Date.prototype.getTime()
Returns the numeric value of the specified date as the number of milliseconds since January 1, 1970, 00:00:00 UTC (negative for prior times).
Date.prototype.getTimezoneOffset()
Returns the time-zone offset in minutes for the current locale.
Date.prototype.getUTCDate()
Returns the day (date) of the month (1-31) in the specified date according to universal time.
Date.prototype.getUTCDay()
Returns the day of the week (0-6) in the specified date according to universal time.
Date.prototype.getUTCFullYear()
Returns the year (4 digits for 4-digit years) in the specified date according to universal time.
Date.prototype.getUTCHours()
Returns the hours (0-23) in the specified date according to universal time.
Date.prototype.getUTCMilliseconds()
Returns the milliseconds (0-999) in the specified date according to universal time.
Date.prototype.getUTCMinutes()
Returns the minutes (0-59) in the specified date according to universal time.
Date.prototype.getUTCMonth()
Returns the month (0-11) in the specified date according to universal time.
Date.prototype.getUTCSeconds()
Returns the seconds (0-59) in the specified date according to universal time.
Date.prototype.getYear()
Returns the year (usually 2-3 digits) in the specified date according to local time. Use getFullYear() instead.

Setter

Date.prototype.setDate()
Sets the day of the month for a specified date according to local time.
Date.prototype.setFullYear()
Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to local time.
Date.prototype.setHours()
Sets the hours for a specified date according to local time.
Date.prototype.setMilliseconds()
Sets the milliseconds for a specified date according to local time.
Date.prototype.setMinutes()
Sets the minutes for a specified date according to local time.
Date.prototype.setMonth()
Sets the month for a specified date according to local time.
Date.prototype.setSeconds()
Sets the seconds for a specified date according to local time.
Date.prototype.setTime()
Sets the Date object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC, allowing for negative numbers for times prior.
Date.prototype.setUTCDate()
Sets the day of the month for a specified date according to universal time.
Date.prototype.setUTCFullYear()
Sets the full year (e.g. 4 digits for 4-digit years) for a specified date according to universal time.
Date.prototype.setUTCHours()
Sets the hour for a specified date according to universal time.
Date.prototype.setUTCMilliseconds()
Sets the milliseconds for a specified date according to universal time.
Date.prototype.setUTCMinutes()
Sets the minutes for a specified date according to universal time.
Date.prototype.setUTCMonth()
Sets the month for a specified date according to universal time.
Date.prototype.setUTCSeconds()
Sets the seconds for a specified date according to universal time.
Date.prototype.setYear()
Sets the year (usually 2-3 digits) for a specified date according to local time. Use setFullYear() instead.

Conversion getter

Date.prototype.toDateString()
Returns the "date" portion of the Date as a human-readable string.
Date.prototype.toISOString()
Converts a date to a string following the ISO 8601 Extended Format.
Date.prototype.toJSON()
Returns a string representing the Date using toISOString(). Intended for use by JSON.stringify().
Date.prototype.toGMTString()
Returns a string representing the Date based on the GMT (UT) time zone. Use toUTCString() instead.
Date.prototype.toLocaleDateString()
Returns a string with a locality sensitive representation of the date portion of this date based on system settings.
Date.prototype.toLocaleFormat()
Converts a date to a string, using a format string.
Date.prototype.toLocaleString()
Returns a string with a locality sensitive representation of this date. Overrides the Object.prototype.toLocaleString() method.
Date.prototype.toLocaleTimeString()
Returns a string with a locality sensitive representation of the time portion of this date based on system settings.
Date.prototype.toSource()
Returns a string representing the source for an equivalent Date object; you can use this value to create a new object. Overrides the Object.prototype.toSource() method.
Date.prototype.toString()
Returns a string representing the specified Date object. Overrides the Object.prototype.toString() method.
Date.prototype.toTimeString()
Returns the "time" portion of the Date as a human-readable string.
Date.prototype.toUTCString()
Converts a date to a string using the UTC timezone.
Date.prototype.valueOf()
Returns the primitive value of a Date object. Overrides the Object.prototype.valueOf() method.

Приклади

Кілька шляхів створення примірника 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 Latest Draft (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.

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

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes Yes Yes1 Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support Yes Yes Yes Yes Yes Yes Yes

1. The ISO8601 Date Format is not supported in Internet Explorer 8.

Мітки документа й учасники

Мітки: 
 Зробили внесок у цю сторінку: asmforce, DariaManko, bsurai
 Востаннє оновлена: asmforce,