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
|
---
title: Дата
slug: Web/JavaScript/Reference/Global_Objects/Date
tags:
- Date
- JavaScript
- Reference
- время
translation_of: Web/JavaScript/Reference/Global_Objects/Date
---
<div>{{JSRef("Global_Objects", "Date")}}</div>
<h2 id="Summary">Сводка</h2>
<p>Создаёт экземпляр объекта <strong><code>Date</code></strong>, представляющего собой момент времени. Объект Дата содержит число миллисекунд прошедших с 1 января 1970 г. UTC</p>
<p>{{EmbedInteractiveExample("pages/js/date-constructor.html")}}</p>
<div class="hidden">
<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
</div>
<h2 id="Syntax">Синтаксис</h2>
<pre class="syntaxbox"><code>new Date();
new Date(<var>value</var>);
new Date(<var>dateString</var>);
new Date(<var>year</var>, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minute</var>[, <var>second</var>[, <var>millisecond</var>]]]]]);
</code></pre>
<div class="note">
<p><strong>Обратите внимание:</strong> объекты <code>Date</code> могут быть созданы только путём вызова функции <code>Date</code> в качестве конструктора: обычный вызов функции (то есть, без использования оператора {{jsxref("Operators/new", "new")}}) вернёт строку вместо объекта <code>Date</code>; в отличие от других объектных типов JavaScript, объекты <code>Date</code> не имеют литерального синтаксиса.</p>
</div>
<h3 id="Parameters">Параметры</h3>
<div class="note">
<p><strong>Обратите внимание:</strong> если функция <code>Date</code> вызывается в качестве конструктора с более, чем одним аргументом, значения, большие логического диапазона (например, 13 в качестве номера месяца или 70 для значения минут) «переметнутся» на соседние значения. Например, вызов <code>new Date(2013, 13, 1)</code> эквивалентен вызову <code>new Date(2014, 1, 1)</code>, оба создадут дату <code>2014-02-01</code> (нумерация месяцев начинается с нуля). Тоже самое действует и для других значений: вызов <code>new Date(2013, 2, 1, 0, 70)</code> эквивалентен вызову <code>new Date(2013, 2, 1, 1, 10)</code> — оба вызова создадут дату <code>2013-03-01T01:10:00</code>.</p>
</div>
<div class="note">
<p><strong>Обратите внимание:</strong> если функция Date вызывается в качестве конструктора с более чем одним аргументом, то указанные аргументы интерпретируются как локальное время. Если аргументы указывают время в UTC, используйте <code>new Date({{jsxref("Date.UTC()", "Date.UTC(...)")}})</code> с теми же аргументами.</p>
</div>
<dl>
<dt><code>value</code></dt>
<dd>Целое значение, представляющее количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC (эпохи Unix).</dd>
<dt><code>dateString</code></dt>
<dd>Строковое значение, представляющее дату. Строка должна быть в одном из форматов, распознаваемых методом {{jsxref("Date.parse()")}} (совместимые с IETF RFC 2822 временные метки [<a href="http://tools.ietf.org/html/rfc2822#page-14">на английском</a>, <a href="http://rfc2.ru/5322.rfc/print#p3.3">на русском</a>], а также версия ISO8601 [<a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15">на английском</a>, <a href="http://es5.javascript.ru/x15.9.html#x15.9.1.15">на русском</a>]).</dd>
<dt><code>year</code></dt>
<dd>Целое значение, представляющее год. Значения с 0 по 99 отображаются на года с 1900 по 1999. Смотрите {{anch("Example:_Two_digit_years_map_to_1900_-_1999", "пример ниже")}}.</dd>
<dt><code>month</code></dt>
<dd>Целое значение, представляющее месяц, начинается с 0 для января и кончается 11 для декабря.</dd>
<dt><code>day</code></dt>
<dd>Необязательный параметр. Целое значение, представляющее день месяца.</dd>
<dt><code>hour</code></dt>
<dd>Необязательный параметр. Целое значение, представляющее часы дня.</dd>
<dt><code>minute</code></dt>
<dd>Необязательный параметр. Целое значение, представляющее минуты времени.</dd>
<dt><code>second</code></dt>
<dd>Необязательный параметр. Целое значение, представляющее секунды времени.</dd>
<dt><code>millisecond</code></dt>
<dd>Необязательный параметр. Целое значение, представляющее миллисекунды времени.</dd>
</dl>
<h2 id="Description">Описание</h2>
<ul>
<li>Если никаких аргументов передано не было, конструктор создаёт объект <code>Date</code> для текущих даты и времени, согласно системным настройкам.</li>
<li>Если передано как минимум два аргумента, отсутствующие аргументы устанавливаются в стартовые значения - день месяца 1 и время полуночи.</li>
<li>Дата в JavaScript измеряется в миллисекундах, прошедших с полуночи 1 января 1970 года по UTC. День содержит 86 400 000 миллисекунд. Диапазон дат объекта <code>Date</code> варьируется от -100 000 000 до 100 000 000 дней относительно 1 января 1970 года по UTC.</li>
<li>Объект <code>Date</code> обеспечивает универсальное поведение на всех платформах. Значение времени может передаваться между системами для представления одинакового момента во времени и, если оно используется для создания локального объекта даты, будет отражать местный эквивалент времени.</li>
<li>Объект <code>Date</code> поддерживает несколько методов для работы с UTC (всемирным координированным временем), наряду с методами работы с местным временем. UTC, также известное как среднее время по Гринвичу (GMT), ссылается на время, установленное Всемирным стандартом времени. Местное время — это время на компьютере, на котором выполняется JavaScript.</li>
<li>Вызов объекта <code>Date</code> в качестве функции (то есть, без использования оператора {{jsxref("Operators/new", "new")}}) вернёт строку, представляющую текущие дату и время.</li>
</ul>
<h2 id="Properties">Свойства</h2>
<dl>
<dt>{{jsxref("Date.prototype")}}</dt>
<dd>Позволяет добавлять свойства к объекту <code>Date</code>.</dd>
<dt><code>Date.length</code></dt>
<dd>Значение свойства <code>Date.length</code> равно 7. Это количество аргументов, обрабатываемых конструктором.</dd>
</dl>
<div>{{jsOverrides("Function", "properties", "prototype")}}</div>
<h2 id="Methods">Методы</h2>
<dl>
<dt>{{jsxref("Date.now()")}}</dt>
<dd>Возвращает числовое значение, соответствующее текущему времени — количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</dd>
<dt>{{jsxref("Date.parse()")}}</dt>
<dd>Разбирает строковое представление даты и возвращает количество миллисекунд с 1 января 1970 года 00:00:00 по местному времени.</dd>
<dt>{{jsxref("Date.UTC()")}}</dt>
<dd>Принимает те же самые параметры, что и самый длинный вариант конструктора (то есть, от 2 до 7) и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</dd>
</dl>
<div>{{jsOverrides("Function", "Methods", "now", "parse", "UTC")}}</div>
<h2 id="Date_instances">Экземпляры объекта <code>Date</code></h2>
<p>Все экземпляры объекта <code>Date</code> наследуются от {{jsxref("Date.prototype")}}. Объект прототипа конструктора <code>Date</code> может быть изменён, чтобы затронуть все экземпляры объекта <code>Date</code>.</p>
<h3 id="Методы">Методы</h3>
<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Date/prototype', 'Methods')}}</div>
<h2 id="Examples">Примеры</h2>
<h3 id="Example_Several_ways_to_assign_dates">Пример: несколько способов создания объекта <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">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);
</pre>
<h3 id="Example_Two_digit_years_map_to_1900_-_1999">Пример: двухциферный год отображается на 1900 - 1999 года</h3>
<p>Для того, чтобы создать и получить даты между 0 и 99 годом, нужно использовать методы {{jsxref("Date.prototype.setFullYear()")}} и {{jsxref("Date.prototype.getFullYear()")}}.</p>
<pre class="brush: js">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)
</pre>
<h3 id="Example_Calculating_elapsed_time">Пример: вычисление затраченного времени</h3>
<p>Следующие примеры показывают, как определить разницу во времени между двумя датами в JavaScript:</p>
<pre class="brush: js">// Используя объекты Date
var start = Date.now();
// Событие, для которого замеряется время, происходит тут:
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // затраченное время в миллисекундах
</pre>
<pre class="brush: js">// Используя встроенные методы
var start = new Date();
// Событие, для которого замеряется время, происходит тут:
doSomethingForALongTime();
var end = new Date();
var elapsed = end.getTime() - start.getTime(); // затраченное время в миллисекундах
</pre>
<pre class="brush: js">// Проверяет функцию и возвращает её возвращаемое значение
function printElapsedTime(fTest) {
var nStartTime = Date.now(),
vReturn = fTest(),
nEndTime = Date.now();
console.log('Затраченное время: ' + String(nEndTime - nStartTime) + ' миллисекунд');
return vReturn;
}
yourFunctionReturn = printElapsedTime(yourFunction);
</pre>
<div class="blockIndicator note">
<p><strong>Обратите внимание:</strong> в браузерах, поддерживающих высокое временное разрешение с помощью {{domxref("window.performance", "API замера производительности", "", 1)}}, метод {{domxref("Performance.now()")}} может обеспечить более надёжные и точные замеры затраченного времени, нежели метод {{jsxref("Date.now()")}}.</p>
</div>
<h3 id="Получить_количество_секунд_с_начала_эпохи_Unix">Получить количество секунд с начала эпохи Unix</h3>
<pre><code>var seconds = Math.floor(Date.now() / 1000);</code></pre>
<p>В этом случае важно возвращать только целое число (так что простое деление не подойдёт), а также возвращать только фактически прошедшие секунды (поэтому этот код использует {{jsxref ("Math.floor ()")}} а не {{jsxref ("Math.round ()")}}).</p>
<h2 id="Specifications">Спецификации</h2>
{{Specifications}}
<h2 id="Browser_compatibility">Совместимость с браузерами</h2>
<p>{{Compat}}</p>
|