Como criar uma data com um timezone específico em JavaScript

Neste artigo você vai aprender a como criar uma data com um timezone específico em JavaScript, ou seja, de qualquer local do mundo

criar uma data com um timezone específico capa

Fala programador(a), beleza? Bora aprender mais sobre datas e JavaScript!

Para resolver o nosso problema temos uma função específica, que é a toLocaleString do objeto Date

Esta função nos permite escolher formato da data, por exemplo: formato brasileiro ou americano

E também o fuso horário que precisamos, que também é conhecido com timezone

Veja duas aplicações específicas desta função:

const myBrazilianDate = new Date().toLocaleString("pt-BR", {timeZone: "America/Sao_Paulo"})

const myDate = new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

console.log(myBrazilianDate) // "14/03/2022 16:41:57"

console.log(myDate) // "3/14/2022, 3:41:57 PM"
Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

Aqui temos uma data do fuso horário brasileiro sendo criada, e uma data do fuso de Nova York

Note que no primeiro argumento passamos o padrão que a data deverá ser transmitida, no primeiro caso foi configurado pt-BR

Isso nos dá um formato dia/mês/ano hora:minuto:segundo, e nas horas não temos AM e PM, e sim de 0 a 23, que é o padrão que o Brasil utiliza

Conclusão

No artigo de hoje você aprendeu a como criar uma data com um timezone específico em JavaScript

Utilizamos o objeto Date e a função toLocaleString, ela nos permite configurar uma data com um formato e um timezone específico

Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias! Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!

Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias. O link acima contém um cupom de desconto para os cursos!

O toLocaleString devolve texto, não uma data nova:

Repara no que saiu no console ali em cima

É uma string, já formatadinha pra jogar na tela

Ou seja: serve pra EXIBIR, não pra continuar fazendo conta

Tome cuidado! Se você guardar esse retorno numa variável e depois tentar comparar com outra data, ou somar dias, vai dar ruim, porque texto não tem os métodos do objeto Date

A regra prática é simples: mantenha o objeto Date pra manipular, e chame o toLocaleString só na hora de mostrar pro usuário

faça o teste! Compara o retorno de new Date() com o retorno do toLocaleString e vê a diferença na hora 🙂

Por que a data muda quando o código sai da sua máquina?

Essa é a pegadinha clássica

Na sua máquina roda certinho, aí você sobe pro servidor e o horário aparece diferente

O motivo: quando você NÃO passa o timeZone, quem decide o fuso é o ambiente onde o código está rodando

No seu computador o ambiente é o seu fuso, no navegador do usuário é o fuso dele, e num servidor é o fuso que o servidor estiver configurado

Por isso o segundo argumento com o timeZone é tão importante: ele tira a decisão do ambiente e coloca a decisão no seu código

Se a data precisa sair sempre no fuso de São Paulo, independente de onde rode, você diz isso explicitamente

const myBrazilianDate = new Date().toLocaleString("pt-BR", {timeZone: "America/Sao_Paulo"})

Sem isso, você está confiando na configuração da máquina, e configuração de máquina muda 😛

O formato do timezone: Região/Cidade

Olha os dois exemplos que usamos: America/Sao_Paulo e America/New_York

Percebe o padrão? É sempre região barra cidade, com underline no lugar do espaço

Não é sigla, não é o nome do país e não é o horário em si, é o identificador daquela região

E tem um motivo bom pra ser assim: o identificador carrega as regras daquele lugar, então você descreve ONDE, e a formatação resolve o resto

Se você digitar errado, o JavaScript reclama na hora, então na dúvida copia o identificador da cidade que você precisa e testa no console antes de sair espalhando pelo projeto

Exibir num fuso, guardar num só:

Um conselho que vale mais que o código em si

Escolha UM padrão pra armazenar a data (no banco, na API, no que for) e trate fuso só na hora de exibir

Se cada tela salvar a data já formatada no fuso do usuário, você perde a referência e depois não consegue nem ordenar direito

Pensa assim: o dado guardado é o instante, o toLocaleString é a roupa que ele veste pra aparecer

Guardar a roupa no lugar do instante é o começo de um bug bem chato de achar

Leia também

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares