Neste post veremos um resumão do objeto Date do JavaScript e como manipular seus atributos.
A instância do objeto Date representa um único ponto no tempo. Apesar de ter o nome Date (data em inglês), este objeto também lida com o tempo.
Inicializando o objeto Date
Inicializamos um objeto Date usando
let d = new Date();
Isso criará um objeto Date apontando para o o momento atual. Internamente, as datas são expressas em milissegundos desde 1º de janeiro de 1970 (UTC). Se passarmos 0, receberemos um objeto Date que representa a hora em 1º de janeiro de 1970 (UTC):
let d = new Date(0);
Se passarmos uma string ao invés de um número, o objeto Date usará o método de análise para determinar a data que você está passando. Exemplos:
// Caso o apresente apenas o ano, o mês default será janeiro // Caso não apresente o dia, o default será o primeiro // Caso não apresente o horário, o default será 00:00:00 // Lembrando que padrões americanos de data funcionam com mês, dia e ano new Date('2018-07-22') // Formato aaaa-mm-dd new Date('2018-07') // 1º de Julho 2018 - 00:00:00 new Date('2018') // 1º de Janeiro 2018 - 00:00:00 new Date('07/22/2018') // Formato mm-dd-aaaa new Date('2018/07/22') // Formato aaaa-mm-dd new Date('2018/7/22') // Formato aaaa-mm-dd new Date('July 22, 2018') new Date('July 22, 2018 07:22:13') new Date('2018-07-22 07:22:13') new Date('2018-07-22T07:22:13') new Date('25 March 2018') new Date('25 Mar 2018') new Date('25 March, 2018') new Date('March 25, 2018') new Date('March 25 2018') new Date('March 2018') // 1º de Março de 2018 - 00:00:00 new Date('2018 March') // 1º de Março de 2018 - 00:00:00 new Date('2018 MARCH') // 1º de Março de 2018 - 00:00:00 new Date('2018 march') // 1º de Março de 2018 - 00:00:00
O mínimo deve ter 3 parâmetros, mas a maioria dos mecanismos JavaScript também interpreta menos que estes:
new Date(2018, 6) // Dom jul 01 2018 00:00:00 GMT + 0200 (horário de verão da Europa Central) new Date(2018) // Qui Jan 01 1970 01:00:02 GMT + 0100 (Hora Padrão da Europa Central)
Em qualquer um desses casos, a data resultante é relativa ao fuso horário do seu computador. Isso significa que dois computadores diferentes podem gerar um valor diferente para o mesmo objeto de data. O JavaScript, sem qualquer informação sobre o fuso horário, considerará a data como UTC ou tempo universal coordenado (saiba mais acessando este link) e executará automaticamente uma conversão para o fuso horário atual do computador.
Então, resumindo, você pode criar um novo objeto Date de 4 maneiras:
- não passando parâmetros, cria um objeto Date que representará a data e hora do momento que o objeto foi criado.
- passando um número, que representa os milissegundos de 1 de janeiro de 1970 às 00:00 GMT.
- passando uma string, que representa uma data.
- passando um conjunto de parâmetros, que representam as diferentes partes de uma data.
Fusos horários
Ao inicializar uma data, você pode passar um fuso horário, portanto, a data não é assumida como UTC e depois convertida para o fuso horário local. Você pode especificar um fuso horário adicionando-o no formato +HORAS ou adicionando o nome do fuso horário entre parênteses:
new Date('July 22, 2018 07:22:13 +0700') new Date('July 22, 2018 07:22:13 (CET)')
ATENÇÂO: Se você especificar um nome de fuso horário errado entre parênteses, o JavaScript será padronizado como UTC sem reclamar. Mas, se você especificar um formato numérico incorreto, o JavaScript se queixará com um erro de “Data Inválida”.
Conversões de data e formatação
Dado um objeto Date, existem muitos métodos que gerarão uma string a partir dessa data:
const date = new Date('July 22, 2018 07:22:13') date.toString() // "Sun Jul 22 2018 07:22:13 GMT+0200 (Central European Summer Time)" date.toTimeString() //"07:22:13 GMT+0200 (Central European Summer Time)" date.toUTCString() //"Sun, 22 Jul 2018 05:22:13 GMT" date.toDateString() //"Sun Jul 22 2018" date.toISOString() //"2018-07-22T05:22:13.000Z" (ISO 8601 format) date.toLocaleString() //"22/07/2018, 07:22:13" date.toLocaleTimeString() //"07:22:13" date.getTime() //1532236933000 date.getTime() //1532236933000
Os métodos getter do objeto Date
Um objeto Date oferece vários métodos para verificar seu valor. Tudo isso depende do fuso horário atual do computador:
const date = new Date('July 22, 2018 07:22:13') date.getDate () // 22 (os valores do dia iniciam na base 1) date.getDay () // 0 (0 significa domingo, 1 significa segunda ..) date.getFullYear () // 2018 date.getMonth () // 6 (O valor dos meses inicia no 0) date.getHours () // 7 date.getMinutes () // 22 date.getSeconds () // 13 date.getMilliseconds () // 0 (não especificado quando criado o objeto) date.getTime () // 1532236933000 date.getTimezoneOffset () // - 120 (irá variar dependendo de onde você estiver e quando você verificar - este é o CET durante o verão). Retorna a diferença de fuso horário expressa em minutos
Caso você precise, existem versões UTC equivalentes desses métodos, que retornam o valor UTC em vez dos valores adaptados ao seu fuso horário atual:
date.getUTCDate () // 22 date.getUTCDay () // 0 (0 significa domingo, 1 significa segunda ..) date.getUTCFullYear () // 2018 date.getUTCMonth () // 6 (inicia em 0) date.getUTCHours () // 5 (não 7 como acima) date.getUTCMinutes () // 22 date.getUTCSeconds () // 13 date.getUTCMilliseconds () // 0 (não especificado)
Os métodos setter do objeto Date
Da mesma forma, o JavaScript possue diversos métodos que servem para definir (setar) novos valores no objeto Date.
let d = new Date(); // Os seguintes métodos definem: setDate(2) // o dia como um número (1-31) setFullYear(2020) // Define o ano. setFullYear(2020, 5, 20) // Define o ano, mês e dia. setHours(22) // Define as horas (0-23) setMilliseconds(100) // Define os milissegundos (0 a 999) setMinutes(55) // Define os minutos (0-59) setMonth(0) // Define o mês (0-11). 0 é Janeiro setSeconds(1) // Define os segundos (0-59) setTime(125033) // Define o tempo (milissegundos desde 1º de janeiro de 1970)
Comparando duas datas
Você pode calcular a diferença entre duas datas usando Date.getTime():
const date1 = new Date('July 10, 2018 07:22:13') const date2 = new Date('July 22, 2018 07:22:13') const diff = date2.getTime () - date1.getTime () // diferença em milissegundos
Da mesma forma, você pode verificar se duas datas são iguais:
const date1 = new Date('July 10, 2018 07:22:13') const date2 = new Date('July 10, 2018 07:22:13') if (date2.getTime () === date1.getTime ()) { // datas são iguais }
Lembre-se de que getTime() retorna o número de milissegundos, portanto é necessário levar em conta o tempo na comparação. 10 de julho de 2018 07:22:13 não é igual a novo 10 de julho de 2018 pois, conforme mencionado no começo, se você não declarar o horário, o JavaScript o deixará como 00:00:00
Fonte: