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
270
271
|
---
title: Date
slug: Web/JavaScript/Reference/Global_Objects/Date
tags:
- Date
- JavaScript
translation_of: Web/JavaScript/Reference/Global_Objects/Date
---
<div>{{JSRef("Global_Objects", "Date")}}</div>
<h2 id="Summary" name="Summary">Resumo</h2>
<p>Cria uma instância JavaScript de <strong><code>Date</code></strong> que representa um único momento no tempo. Objetos Date são baseados no valor de tempo que é o número de milisegundos desde 1º de Janeiro de 1970 (UTC).</p>
<h2 id="Syntax" name="Syntax">Construtor</h2>
<pre class="brush: js">new Date();
new Date(<em>valor</em>);
new Date(<em>dataString</em>);
new Date(<em>ano</em>, <em>mês</em>, <em>dia</em>, <em>hora</em>, <em>minuto</em>, <em>segundo</em>, <em>milissegundo</em>);</pre>
<p>{{ note('Note que objetos JavaScript <code>Date</code> só podem ser instanciados chamando JavaScript <code>Date</code> como um construtor: chamá-lo como uma função regular (ou seja, sem o operador <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a>) irá retornar uma string ao invés de um objeto <code>Date</code>; ao contrário de outros tipos de objetos JavaScript, objetos JavaScript <code>Date</code> não têm sintaxe literal.') }}</p>
<h3 id="Parameters" name="Parameters">Parâmetros para o constructor Date</h3>
<p>Nota: Quando Date for chamado como um construtor com mais de um argumento, se os valores forem maiores do que seu limite lógico (e.g. se 13 for fornecido como um valor para mês ou 70 for o valor para minuto), o valor adjacente será ajustado. E.g. new Date(2013, 13, 1) é equivalente a new Date(2014, 1, 1), ambos criam uma data para 2014-02-01 (note que o mês começa em 0). Similarmente para outros valores: new Date(2013, 2, 1, 0, 70) é equivalente a new Date(2013, 2, 1, 1, 10), pois ambos criam uma data para 2013-03-01T01:10:00.</p>
<dl>
<dt><em><code>value</code></em></dt>
<dd>Um valor inteiro representando o número de milisegundos desde 1 de Janeiro de 1970 00:00:00 UTC (Era Unix ou Marco Zero).</dd>
</dl>
<dl>
<dt><em><code>dataString</code></em></dt>
<dd>Um valor do tipo String que representa uma data. A string deverá estar uma formato reconhecido pelo método {{jsxref("Date.parse()")}} (<a class="external" href="http://tools.ietf.org/html/rfc2822#page-14">IETF-compliant RFC 2822 timestamps</a> e também uma <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15">versão da ISO8601</a>).</dd>
</dl>
<dl>
<dt><em><code>year</code></em></dt>
<dd>Um valor inteiro que representa o ano. Valores de 0 a 99 correspondem aos anos de 1900 a 1999. Veja o <a href="#Two digit years">exemplo abaixo</a>.</dd>
</dl>
<dl>
<dt><em><code>month</code></em></dt>
<dd>Um valor inteiro que representa o mês, começando com 0 para Janeiro até 11 para Dezembro.</dd>
</dl>
<dl>
<dt><em><code>day</code></em></dt>
<dd>Um valor inteiro que representa o dia do mês.</dd>
</dl>
<dl>
<dt><em><code>hour</code></em></dt>
<dd>Um valor inteiro que representa a hora do dia.</dd>
</dl>
<dl>
<dt><em><code>minute</code></em></dt>
<dd>Um valor inteiro que representa o segmento de um minuto de tempo.</dd>
</dl>
<dl>
<dt><em><code>second</code></em></dt>
<dd>Um valor inteiro que representa o segmento de segundo do tempo.</dd>
</dl>
<dl>
<dt><em><code>millisecond</code></em></dt>
<dd>Um valor inteiro que representa o segmento de milisegundo do tempo.</dd>
</dl>
<h2 id="Description" name="Description">Descrição</h2>
<ul>
<li>Se nenhum argumento for fornecido, o construtor criará um objeto JavaScript Date com a data e hora corrente de acordo com as configurações do sistema.</li>
<li>Se ao menos 2 argumentos forem fornecidos, os argumentos ausentes serão configurados como 1 (se o dia estiver ausente) ou 0 para todos os outros.</li>
<li>A data do JavaScript é baseada no valor de tempo em milisegundos desde a meia noite de 01 de Janeiro de 1970, UTC. Um dia corresponde a 86.400,000 milisegundos. O intervalo do objeto Date no JavaScript é de -100.000,000 dias a 100.000,000 dias relativo a 01 de Janeiro de 1970, UTC.</li>
<li>O objeto Date no JavaScript tem um comportamento uniforme nas plataformas. O valor do tempo pode ser transmitido entre sistemas para representar o mesmo instante no tempo e se for usado para criar um objeto de data local, ele refletirá o tempo local equivalente.</li>
<li>O objeto Date JavaScript suporta vários métodos UTC (universal), assim como métodos de tempo locais. UTC, também conhecido como Tempo Médio de Greenwich (Greenwich Mean Time, GMT), refere-se ao tempo como definido pelo Padrão de Tempo Mundial (World Time Standard). O tempo local é o tempo conhecido pelo computador onde o JavaScript é executado.</li>
<li>Invocar o objeto Date no JavaScript como uma função (i.e., sem o operador <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a>) retornatá uma string representando a data e hora corrente.</li>
</ul>
<h2 id="Properties" name="Properties">Propriedades</h2>
<dl>
<dt>{{jsxref("Date.prototype")}}</dt>
<dd>Permite adicionar propriedades a um objeto javaScript Date.</dd>
<dt>Date.length</dt>
<dd>O valor de <code>Date.length</code> é 7. Esse é o número de argumentos manipulados pelo construtor.</dd>
</dl>
<p>{{ jsOverrides("Function", "properties", "prototype") }}</p>
<h2 id="Methods" name="Methods">Métodos</h2>
<dl>
<dt>{{jsxref("Date.now()")}}</dt>
<dd>Retorna o valor numérico correspondente ao tempo corrente - o número de milisegundos passados desde 1 de Janeiro de 1970 00:00:00 UTC.</dd>
<dt>{{jsxref("Date.parse()")}}</dt>
<dd>Analisa uma string que representa uma data e retorna o número de milisegundos desde 1 de Janeiro, 1970, 00:00:00, hora local.</dd>
<dt>{{jsxref("Date.UTC()")}}</dt>
<dd>Aceita os mesmos parâmetros como a forma mais longa do construtor (i.e. 2 até 7) e retorna o número de milisegundos desde 1 de Janeiro, 1970, 00:00:00 UTC. </dd>
</dl>
<p>{{ jsOverrides("Function", "Methods", "now", "parse", "UTC") }}</p>
<h2 id="Date_instances" name="Date_instances">Instâncias JavaScript de <code>Date</code> </h2>
<p>Todas as instâncias <code>Date</code> são herdadas de {{jsxref("Date.prototype")}}. O objeto protótipo do construtor <code>Date</code> pode ser modificado para afetar todas as instâncias de <code>Date</code>.</p>
<h3 id="Métodos">Métodos</h3>
<p>{{ page("/en-US/docs/JavaScript/Reference/Global_Objects/Date/prototype", "Methods") }}</p>
<h2 id="Examples" name="Examples">Exemplos</h2>
<h3 id="Example:_Several_ways_to_assign_dates" name="Example:_Several_ways_to_assign_dates">Várias formas de se criar um objeto Date</h3>
<p>Os seguintes exemplos mostram várias formas de se criar datas em JavaScript: </p>
<div class="note">
<p><strong>Nota:</strong> a conversão de <em>strings</em> com o construtor de <code>Date</code> (<code>Date.parse</code> é equivalente ao contrutor) é fortemente desencorajada devido às inconsistências e diferenças dos navegadores.</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="Anos_com_dois_dígitos_mapeados_para_1900_-_1999"><a name="Two digit years">Anos com dois dígitos mapeados para 1900 - 1999</a></h3>
<p>Para criar e obter datas entre os anos 0 e 99 os métodos {{jsxref("Date.prototype.setFullYear()")}} e {{jsxref("Date.prototype.getFullYear()")}} devem ser usados.</p>
<pre class="brush: js">var data = new Date(98, 1); //<span class="objectBox objectBox-string"> Dom Fev 01 1998 00:00:00 GMT+0000 (GMT)</span>
// Métodos em desuso, 98 mapeia para 1998 aqui também
data.setYear(98); // Dom Fev 01 1998 00:00:00 GMT+0000 (GMT)
data.setFullYear(98); // Sab Fev 01 0098 00:00:00 GMT+0000 (BST)</pre>
<h3 id="Example:_Calculating_elapsed_time" name="Example:_Calculating_elapsed_time">Calculando o tempo decorrido</h3>
<p>Os seguintes exemplos mostram como determinar o tempo decorrido entre duas datas no JavaScript em milissegundos.</p>
<p>Devido aos tamanhos diferentes dos dias (devido à mudança do horário de verão), meses e dias, expressar o tempo decorrido em unidades maiores que horas, minutos e segundos requer analisar os problemas e deve ser cuidadosamente investigado antes de se tentar utilizar.</p>
<pre class="brush: js">// usando objetos Date
var inicio = Date.now();
// o evento para o tempo vai aqui:
facaAlgoPorUmLongoTempo();
var fim = Date.now();
var decorrido = fim - inicio; // tempo decorrido em milisegundos
</pre>
<pre class="brush: js">// utilizando métodos embutidos
var inicio = new Date();
// o evento para o tempo vai aqui:
facaAlgoPorUmLongoTempo();
var fim = new Date();
var decorrido = fim.getTime() - inicio.getTime(); // tempo decorrido em milisegundos
</pre>
<pre class="brush: js">// para testar uma função e obter o seu retorno
function imprimirTempoDecorrido(fTeste) {
var nHoraInicial = Date.now(),
vRetorno = fTeste(),
nHoraFinal = Date.now();
alert("Tempo decorrido: " + String(nHoraFinal - nHoraInicial) + " milisegundos");
return vRetorno;
}
retornoDaSuaFuncao = imprimirTempoDecorrido(suaFuncao);
</pre>
<div class="note">
<p>Nota: Em navegadores que suportam a API de Desempenho Web ({{domxref("window.performance", "Web Performance API", "", 1)}}) com o recurso de tempo de alta resolução, {{domxref("Performance.now()")}} pode fornecer medidas de tempo decorrido mais confiáveis e precisas do que {{jsxref("Date.now()")}}.</p>
</div>
<h2 id="Especificações">Especificações</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Especificação</th>
<th scope="col">Estado</th>
<th scope="col">Comentário</th>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-date-objects', 'Date')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.9', 'Date')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ES1')}}</td>
<td>{{Spec2('ES1')}}</td>
<td>Definição inicial. Implementado no JavaScript 1.1.</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility">Compatibilidade com navegadores</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
<table class="compat-table">
<tbody>
<tr>
<th>Recurso</th>
<th>Chrome</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari</th>
</tr>
<tr>
<td>Suporte Básico</td>
<td>{{CompatVersionUnknown()}} [1]</td>
<td>{{CompatVersionUnknown()}} [1]</td>
<td>{{CompatVersionUnknown()}} [2]</td>
<td>{{CompatVersionUnknown()}} [1]</td>
<td>{{CompatVersionUnknown()}} [1]</td>
</tr>
</tbody>
</table>
</div>
<div id="compat-mobile">
<table class="compat-table">
<tbody>
<tr>
<th>Recurso</th>
<th>Android</th>
<th>Chrome for Android</th>
<th>Firefox Mobile (Gecko)</th>
<th>IE Mobile</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
</tr>
<tr>
<td><span style="font-size: 12px; line-height: 18px;">Suporte Básico</span></td>
<td>{{CompatVersionUnknown()}}</td>
<td>{{CompatVersionUnknown()}}</td>
<td>{{CompatVersionUnknown()}}</td>
<td>{{CompatVersionUnknown()}}</td>
<td>{{CompatVersionUnknown()}}</td>
<td>{{CompatVersionUnknown()}}</td>
</tr>
</tbody>
</table>
</div>
<p>[1] Alguns navegadores pode ter problemas quando verificam datas: <a href="http://dygraphs.com/date-formats.html">3/14/2012 blog from danvk Comparing FF/IE/Chrome on Parsing Date Strings</a></p>
<p>[2] <a href="https://msdn.microsoft.com/en-us//library/ie/ff743760(v=vs.94).aspx">ISO8601 Date Format não é suportado</a> o Internet Explorer 8 e outras versões podem ter <a href="http://dygraphs.com/date-formats.html">problemas quando convertem datas</a></p>
|