HOWTO · JavaScript

Inicializar a data do JavaScript para um fuso horário específico

Este tutorial ensina como inicializar uma data JavaScript em um fuso horário específico.

Nesta página

Este tutorial ensina como inicializar uma data JavaScript em um fuso horário específico.

O objeto de data do JavaScript funciona com UTC internamente, mas exibe a saída de acordo com a hora local do computador operacional. O objeto de data não tem nenhuma noção de fuso horário. Não há objetos string declarados. É apenas uma medição do número de milissegundos decorridos desde 1970-01-01 00:00:00 UTC. Ao emitir a hora, ele leva em consideração automaticamente o fuso horário local do computador e se aplica à representação interna. Não funciona com fusos horários diferentes. Portanto, precisamos da ajuda de funções e bibliotecas externas para realizar tais operações.

Use os métodos Intl.DateTimeFormat e format() para inicializar a data do JavaScript em um fuso horário específico

O objeto JavaScript Intl é a ajuda para a API de internacionalização do JavaScript. Ele nos fornece muitas funções para a conversão de data / hora, strings e números. O objeto Intl usa DateTimeFormat para formatar strings de data e hora. Ele tem um método de format que pega a data e a converte para um fuso horário diferente usando o local e as opções fornecidas como argumento para o formatador. Este método formatará a data para o fuso horário necessário e o converterá em uma string.

O parâmetro usado pela função format() é a data. Exigimos os seguintes argumentos para a formação do objeto Intl.DateTimeFormat:

  1. locales: é um array de strings que contém tags de idioma e locale. Normalmente, é um parâmetro opcional, mas é necessário para o nosso propósito. Para alterar o fuso horário, podemos apenas especificar o código do idioma BCP e o fuso horário necessário.
  2. options: é um objeto usado para especificar propriedades para realizar comparações. Também é um parâmetro opcional que pode ser usado para especificar o estilo e as unidades de exibição. Algumas das propriedades são second, minute, hour, day, month e year, etc.

Por exemplo: podemos passar um objeto de opções como {hour : 'numeric', hour12 : false, minutes : 'numeric', timeZoneName : 'short'}

function changeTimezone() {
  let date = new Date(Date.UTC(2021, 5, 28, 3, 0, 0));
  console.log('Date in India: ' + date);
  let formatter =
      new Intl.DateTimeFormat('en-US', {timeZone: 'America/Denver'});
  let usDate = formatter.format(date);
  console.log('Date in USA: ' + usDate);
}

Resultado

Date in India: Mon Jun 28 2021 08: 30: 00 GMT + 0530(India Standard Time)
VM1504: 7 Date in USA: 6 / 27 / 2021

Na função acima, primeiro criamos um objeto Date usando o construtor Date(). Em seguida, criamos um formatador usando Intl.DateTimeFormat especificando o local, ou seja, a tag de idioma BCP e o timeZone para o qual queremos converter. Em seguida, usamos esse formatador para converter a data para o fuso horário necessário.

Use o método toLocaleString() para inicializar a data do JavaScript em um fuso horário específico

O método toLocaleString() é o mais comumente usado para alterar o fuso horário, pois é mais fácil de usar e pode ser chamado diretamente em uma data. Funciona da mesma forma que Intl.DateTimeFormat. Ele também pega a string de local e as opções como argumentos e retorna uma string com datas formatadas de acordo com elas. A vantagem desse método é que, ao contrário do método acima, converte a hora de acordo com o fuso horário do país e retorna isso na string.

function changeTimezone() {
  let date = new Date(Date.UTC(2021, 5, 28, 3, 0, 0));
  console.log('Date in India: ' + date);
  let usDate = date.toLocaleString('en-US', {timeZone: 'America/New_York'});
  console.log('Date in USA: ' + usDate);
}

Resultado

Date in India: Mon Jun 28 2021 08: 30: 00 GMT + 0530(India Standard Time)
Date in USA: 6 / 27 / 2021, 11: 00: 00 PM

Na função acima, primeiro criamos um objeto Date usando o construtor Date(). Chamamos a função toLocaleString na data especificando a langauge tag e o timeZone e obtemos a data / hora convertida para um fuso horário diferente.