aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/date/index.html
blob: 61c26eb1d873c3a6751a3b777d252d6fa1136ba7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
---
title: Date
slug: Web/JavaScript/Reference/Global_Objects/Date
tags:
  - Date
  - JavaScript
  - Time
  - Дата
  - Час Unix
translation_of: Web/JavaScript/Reference/Global_Objects/Date
---
<div>{{JSRef}}</div>

<div>Об'єкт JavaScript <strong><code>Date</code></strong> відображає єдиний момент у часі у  незалежному від платформи форматі. Об'єкти <code>Date</code> містять число, яке відображає кількість мілісекунд від 1 січня 1970 року за UTC.</div>

<div></div>

<div class="blockIndicator note">
<p>TC39 працює над об'єктом <a href="https://tc39.es/proposal-temporal/docs/index.html">Temporal</a>, новим API для дати та часу.<br>
 Читайте більше щодо нього у <a href="https://blogs.igalia.com/compilers/2020/06/23/dates-and-times-in-javascript/">блозі Igalia</a> та заповнюйте <a href="https://forms.gle/iL9iZg7Y9LvH41Nv8">опитування</a>. Він потребує відгуків реальних веб-розробників, але поки що не готовий для повноцінного використання!</p>
</div>

<h2 id="Опис">Опис</h2>

<h3 id="Час_ECMAScript_та_часові_мітки">Час ECMAScript та часові мітки</h3>

<p>Дата JavaScript вказується як кількість мілісекунд, що пройшли від 1 січня 1970 року за UTC. Ця дата та час не є тим самим, що й <strong>час UNIX</strong> (кількість <em>секунд</em>, що пройшли від опівночі 1 січня 1790 року за UTC), який є базовим значенням для дати та часу, що записуються комп'ютером.</p>

<p><strong>Заувага:</strong> Важливо пам'ятати, що, тоді як значення часу в серці об'єкта Date є значенням UTC, базові методи з отримання дати та часу, або їхніх елементів, усі працюють у локальному (тобто, системному) часовому поясі та зсуві.</p>

<p>Варто зауважити, що максимальне значення <code>Date</code> не співпадає з максимальним безпечним цілим числом (<code>Number.MAX_SAFE_INTEGER</code> дорівнює 9,007,199,254,740,991). Натомість, ECMA-262 визначає, що максимум ±100,000,000 (сто мільйонів) днів відносно 1 січня 1970 року за UTC (тобто, 20 квітня 271821 до н.е. ~ 13 вересня 275760 н.е.) можуть бути представлені стандартним об'єктом <code>Date</code> (що дорівнює ±8,640,000,000,000,000 мілісекундам).</p>

<h3 id="Формат_дати_та_перетворення_часових_поясів">Формат дати та перетворення часових поясів</h3>

<p>Існує велика кількість методів для отримання дати у різних форматах, а також для виконання перетворень часових поясів. Особливо корисні функції, які виводять дату та час у всесвітньому координованому часі (Coordinated Universal Time, UTC), глобальному стандартному часі, визначеному Всесвітнім часовим стандартом (World Time Standard). (Цей час історично відомий як <em>середній час за Гринвічем</em>, бо UTC пролякає вздовж меридіану, що включає Лондон — та сусідній Гринвіч — у Великій Британії.) Пристрій користувача надає місцевий час.</p>

<p>Над додачу до методів для читання та зміни окремих компонентів місцевої дати та часу (таких, як {{jsxref("Date.getDay", "getDay()")}} та {{jsxref("Date.setHours", "setHours()")}}), також існують версії тих самих методів, які читають та змінюють дату та час, використовуючи час UTC (такі, як {{jsxref("Date.getUTCDay()", "getUTCDay()")}} та {{jsxref("Date.setUTCHours", "setUTCHours()")}}).</p>

<h2 id="Конструктор">Конструктор</h2>

<dl>
 <dt>{{jsxref("Date/Date", "Date()")}}</dt>
 <dd>Створює новий об'єкт <code>Date</code>.</dd>
</dl>

<h2 id="Статичні_методи">Статичні методи</h2>

<dl>
 <dt>{{jsxref("Date.now()")}}</dt>
 <dd>Вертає ціле число, що позначає поточний час — кількість мілісекунд від 1 січня 1970 року 00:00:00 за UTC без врахування високосних секунд.</dd>
 <dt>{{jsxref("Date.parse()")}}</dt>
 <dd>Розбирає рядкове представлення дати та повертає кількість мілісекунд між 00:00:00 за UTC 1 січня 1970 та зазначеною миттю у часі, ігноруючи високосні секунди.</dd>
 <dd>
 <div class="note">
 <p><strong>Заувага:</strong> Розбір рядків з датою (часом) за допомогою метода <code>Date.parse</code> є рішуче небажаним через наявні розбіжності поміж переглядачами.</p>
 </div>
 </dd>
 <dt>{{jsxref("Date.UTC()")}}</dt>
 <dd>Приймає ті самі параметри, що й найдовша форма конструктора (тобто, від 2 до 7), та вертає кількість мілісекунд від 1 січня 1970 року 00:00:00 за UTC, ігноруючи високосні секунди.</dd>
</dl>

<h2 id="Методи_екземплярів">Методи екземплярів</h2>

<dl>
 <dt>{{jsxref("Date.prototype.getDate()")}}</dt>
 <dd>Повертає день місяця (<code>1</code><code>31</code>) для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getDay()")}}</dt>
 <dd>Повертає день тижня (<code>0</code><code>6</code>) для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getFullYear()")}}</dt>
 <dd>Повертає рік (4 цифри для 4-значних років) вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getHours()")}}</dt>
 <dd>Повертає годину (<code>0</code><code>23</code>) у вказаній даті згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getMilliseconds()")}}</dt>
 <dd>Повертає мілісекунди (<code>0</code><code>999</code>) у вказаній даті згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getMinutes()")}}</dt>
 <dd>Повертає хвилини (<code>0</code><code>59</code>) у вказаній даті згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getMonth()")}}</dt>
 <dd>Повертає місяць (<code>0</code><code>11</code>) у вказаній даті згідно з місцевм часом.</dd>
 <dt>{{jsxref("Date.prototype.getSeconds()")}}</dt>
 <dd>Повертає секунди (<code>0</code><code>59</code>) у вказаній даті згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.getTime()")}}</dt>
 <dd>Повертає числове значення вказаної дати у вигляді кількості мілісекунд від 1 січня 1970 року 00:00:00 за UTC. (Для більш ранніх дат повертаються від'ємні значення.)</dd>
 <dt>{{jsxref("Date.prototype.getTimezoneOffset()")}}</dt>
 <dd>Повертає зсув часового поясу у хвилинах для місцевих налаштувань.</dd>
 <dt>{{jsxref("Date.prototype.getUTCDate()")}}</dt>
 <dd>Повертає день місяця (<code>1</code><code>31</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCDay()")}}</dt>
 <dd>Повертає день тижня (<code>0</code><code>6</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCFullYear()")}}</dt>
 <dd>Повертає рік (4 цифри для 4-значних років) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCHours()")}}</dt>
 <dd>Повертає години (<code>0</code><code>23</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCMilliseconds()")}}</dt>
 <dd>Повертає мілісекунди (<code>0</code><code>999</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCMinutes()")}}</dt>
 <dd>Повертає хвилини (<code>0</code><code>59</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCMonth()")}}</dt>
 <dd>Повертає місяць (<code>0</code><code>11</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getUTCSeconds()")}}</dt>
 <dd>Повертає секунди (<code>0</code><code>59</code>) у вказаній даті згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.getYear()")}}</dt>
 <dd>Повертає рік (зазвичай, 2–3 цифри) у вказаній даті згідно з місцевим часом. Використовуйте замість нього {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}}.</dd>
 <dt>{{jsxref("Date.prototype.setDate()")}}</dt>
 <dd>Встановлює день місяця для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setFullYear()")}}</dt>
 <dd>Встановлює повне значення року (наприклад, 4 цифри для 4-значних років) для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setHours()")}}</dt>
 <dd>Встановлює години для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setMilliseconds()")}}</dt>
 <dd>Встановлює мілісекунди для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setMinutes()")}}</dt>
 <dd>Встановлює хвилини для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setMonth()")}}</dt>
 <dd>Встановлює місяць для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setSeconds()")}}</dt>
 <dd>Встановлює секунди для вказаної дати згідно з місцевим часом.</dd>
 <dt>{{jsxref("Date.prototype.setTime()")}}</dt>
 <dd>Встановлює об'єкту {{jsxref("Date")}} час, переданий кількістю мілісекунд від 1 січня 1970 року 00:00:00 за UTC. Використовуйте від'ємні значення для більш ранніх дат.</dd>
 <dt>{{jsxref("Date.prototype.setUTCDate()")}}</dt>
 <dd>Встановлює день місяця для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCFullYear()")}}</dt>
 <dd>Встановлює повне значення року (наприклад, 4 цифри для 4-значних років) для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCHours()")}}</dt>
 <dd>Встановлює години для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCMilliseconds()")}}</dt>
 <dd>Встановлює мілісекунди для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCMinutes()")}}</dt>
 <dd>Встановлює хвилини для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCMonth()")}}</dt>
 <dd>Встановлює місяць для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setUTCSeconds()")}}</dt>
 <dd>Встановлює секунди для вказаної дати згідно зі всесвітнім часом.</dd>
 <dt>{{jsxref("Date.prototype.setYear()")}}</dt>
 <dd>Встановлює рік (зазвичай, 2–3 цифри) для вказаної дати згідно з місцевим часом. Використовуйте замість нього {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}}.</dd>
 <dt>{{jsxref("Date.prototype.toDateString()")}}</dt>
 <dd>Повертає елементи дати об'єкта {{jsxref("Date")}} у вигляді зручного для читання рядка, наприклад, <code>'Thu Apr 12 2018'</code>.</dd>
 <dt>{{jsxref("Date.prototype.toISOString()")}}</dt>
 <dd>Перетворює дату на рядок згідно з розширеним форматом ISO 8601.</dd>
 <dt>{{jsxref("Date.prototype.toJSON()")}}</dt>
 <dd>Повертає рядок, що відображає об'єкт {{jsxref("Date")}}, використовуючи {{jsxref("Date.prototype.toISOString()", "toISOString()")}}. Призначений для використання методом {{jsxref("JSON.stringify()")}}.</dd>
 <dt>{{jsxref("Date.prototype.toGMTString()")}}</dt>
 <dd>Повертає рядок, що відображає об'єкт {{jsxref("Date")}} на основі часового поясу GMT (UTC). Використовуйте замість нього {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}}.</dd>
 <dt>{{jsxref("Date.prototype.toLocaleDateString()")}}</dt>
 <dd>Повертає рядкове представлення елементів дати у відповідності до системних налаштувань.</dd>
 <dt><code><a href="/uk/docs/Archive/Web/JavaScript/Date.toLocaleFormat">Date.prototype.toLocaleFormat()</a></code></dt>
 <dd>Перетворює дату на рядок, використовуючи рядок форматування.</dd>
 <dt>{{jsxref("Date.prototype.toLocaleString()")}}</dt>
 <dd>Повертає рядкове представлення дати відповідно до мовних налаштувань. Заміщує метод {{jsxref("Object.prototype.toLocaleString()")}}.</dd>
 <dt>{{jsxref("Date.prototype.toLocaleTimeString()")}}</dt>
 <dd>Повертає рядкове представлення часу у відповідності до мовних налаштувань.</dd>
 <dt>{{jsxref("Date.prototype.toString()")}}</dt>
 <dd>Повертає рядкове представлення вказаного об'єкта {{jsxref("Date")}}. Заміщує метод {{jsxref("Object.prototype.toString()")}}.</dd>
 <dt>{{jsxref("Date.prototype.toTimeString()")}}</dt>
 <dd>Повертає елементи часу об'єкта {{jsxref("Date")}} у вигляді зручного для читання рядка.</dd>
 <dt>{{jsxref("Date.prototype.toUTCString()")}}</dt>
 <dd>Перетворює дату на рядок, використовуючи часових пояс UTC.</dd>
 <dt>{{jsxref("Date.prototype.valueOf()")}}</dt>
 <dd>Повертає просте значення об'єкта {{jsxref("Date")}}. Заміщує метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
</dl>

<div></div>

<h2 id="Приклади">Приклади</h2>

<h3 id="Кілька_способів_створити_екземпляр_Date">Кілька способів створити екземпляр <code>Date</code></h3>

<p>Наступні приклади демонструють кілька способів створення дат JavaScript:</p>

<div class="note">
<p><strong>Заувага:</strong> Розбір рядків з датою за допомогою конструктора <code>Date</code> (або методу <code>Date.parse</code>, що є одне й те саме) є рішуче небажаним через наявні розбіжності поміж переглядачами.</p>
</div>

<pre class="brush: js notranslate">let today = new Date()
let birthday = new Date('December 17, 1995 03:24:00')
let birthday = new Date('1995-12-17T03:24:00')
let birthday = new Date(1995, 11, 17)            // місяці нумеруються з 0
let birthday = new Date(1995, 11, 17, 3, 24, 0)
let birthday = new Date(628021800000)            // передаємо часову мітку
</pre>

<h3 id="Щоб_отримати_день_місяць_та_рік_або_час"> Щоб отримати день, місяць та рік, або час</h3>

<pre class="brush: js notranslate">let [month, date, year]    = ( new Date() ).toLocaleDateString().split("/")
let [hour, minute, second] = ( new Date() ).toLocaleTimeString().slice(0,7).split(":")</pre>

<h3 id="Двозначний_рік_відповідає_рокам_1900-1999">Двозначний рік відповідає рокам 1900-1999</h3>

<p>Для створення та отримання дат між <code>0</code> та <code>99</code> роками, слід використовувати методи {{jsxref("Date.prototype.setFullYear()")}} та {{jsxref("Date.prototype.getFullYear()")}}.</p>

<pre class="brush: js notranslate">let 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)
</pre>

<h3 id="Обчислення_тривалості">Обчислення тривалості</h3>

<p>У наведених прикладах показано, як визначити час, що пройшов між двома датами JavaScript.</p>

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

<pre class="brush: js notranslate">// Використання об'єктв Date
var start = Date.now();

// Тут якісь обчислення, тривалість яких слід з'ясувати
doSomethingForALongTime();
let end = Date.now()
let elapsed = end - start // час, що пройшов, у мілісекундах
</pre>

<pre class="brush: js notranslate">// Використання вбудованих методів
let start = new Date()

// Подію, час якої необхідно обчислити:
doSomethingForALongTime()
let end = new Date()
let elapsed = end.getTime() - start.getTime() // час, що пройшов, у мілісекундах
</pre>

<pre class="brush: js notranslate">// Щоб перевірити функцію та отримати її результат
function printElapsedTime(fTest) {
  let nStartTime = Date.now(),
      vReturn = fTest(),
      nEndTime = Date.now()

  console.log(`Тривалість: ${ String(nEndTime - nStartTime) } мілісекунд`);
  return vReturn
}

let yourFunctionReturn = printElapsedTime(yourFunction)
</pre>

<div class="note">
<p><strong>Заувага:</strong> У переглядачах з підтримкою часу високої роздільності {{domxref("window.performance", "Web Performance API", "", 1)}}, метод {{domxref("Performance.now()")}} може забезпечити вищу точність та надійність вимірювання тривалості, ніж {{jsxref("Date.now()")}}.</p>
</div>

<h3 id="Отримання_кількості_секунд_з_початку_епохи_ECMAScript">Отримання кількості секунд з початку епохи ECMAScript</h3>

<pre class="notranslate">let seconds = Math.floor(Date.now() / 1000)
</pre>

<p>У цьому випадку важливо повернути тільки ціле число, тому просте ділення не підійде. Також важливо повернути лише секунди, які вже пройшли. (Тому цей код використовує {{jsxref("Math.floor()")}}, а <em>не</em> {{jsxref("Math.round()")}}.)</p>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>

<div class="hidden">Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>

<div>{{Compat("javascript.builtins.Date.Date")}}</div>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>Конструктор {{jsxref("Date/Date", "Date()")}}</li>
</ul>