Skip to main content
Blog
Blog

Como obter o fuso horário do navegador em JavaScript (guia 2026)

Obtenha o fuso horário do navegador em JavaScript com uma linha de código Intl, leia o deslocamento UTC, trate o horário de verão e use-o como sinal de fraude.

Jul 27, 2026 5 min read
Como obter o fuso horário do navegador em JavaScript (guia 2026)

Se você precisa do fuso horário do visitante no navegador, o JavaScript o entrega em uma linha. Este guia cobre a fórmula moderna de uma linha, a abordagem antiga com getTimezoneOffset e quando usar cada uma, como obter a hora UTC, como formatar uma data em qualquer fuso horário, os casos extremos que confundem as pessoas e por que o fuso horário do navegador também é um sinal útil de fraude e de device fingerprinting.

Resumo: obter o fuso horário do navegador em JavaScript

  • A forma moderna: Intl.DateTimeFormat().resolvedOptions().timeZone retorna o nome IANA (por exemplo America/New_York). Funciona em todos os navegadores atuais e não precisa de biblioteca.
  • new Date().getTimezoneOffset() retorna o deslocamento em relação ao UTC em minutos, mas o sinal é invertido e muda com o horário de verão, então prefira o nome IANA para armazenamento.
  • O fuso horário reportado pode ser falsificado, por isso os sistemas de detecção de fraude e de bots o tratam como um sinal entre muitos, comparado com a geolocalização por IP e a impressão digital TLS.

Como obter o fuso horário do navegador em JavaScript (a linha única)

A forma moderna e confiável de ler o fuso horário do navegador é a API Intl:

const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// "America/New_York", "Europe/London", "Asia/Tokyo", ...

Intl.DateTimeFormat().resolvedOptions() retorna as opções de localidade e de formatação que o navegador resolveu para o ambiente atual, e sua propriedade timeZone é o nome de fuso horário IANA. Este é o valor que você quase sempre quer: é estável, legível por humanos e independente do deslocamento atual do horário de verão. É suportado em todos os navegadores modernos (Chrome, Firefox, Safari, Edge).

Como obter o deslocamento UTC com getTimezoneOffset()

Antes de Intl ter suporte amplo, a abordagem comum era Date.prototype.getTimezoneOffset():

const offsetMinutes = new Date().getTimezoneOffset();
// New York in summer (EDT, UTC-4): 240
// London in winter (GMT, UTC+0): 0

Duas coisas surpreendem as pessoas aqui. Primeiro, o sinal é invertido: uma zona que está atrás do UTC retorna um número positivo. getTimezoneOffset retorna os minutos que você soma à hora local para chegar ao UTC, então UTC-4 é 240, não -240. Segundo, o deslocamento não é o fuso horário. Ele muda duas vezes por ano com o horário de verão, e várias zonas diferentes compartilham o mesmo deslocamento, então você não consegue recuperar o nome IANA a partir dele. Use o deslocamento para cálculos rápidos de UTC; use o nome IANA para identificar ou armazenar a zona.

Com o básico coberto, as duas próximas seções tratam da hora UTC e da formatação em uma zona específica, e depois chegamos a por que esse valor importa para a detecção de fraude.

Como obter a hora UTC atual em JavaScript

O UTC é independente do fuso horário do visitante, e é por isso que é o formato certo para enviar a um servidor ou armazenar em um banco de dados:

const now = new Date();
now.toISOString();   // "2026-07-27T14:03:00.000Z" (always UTC)
now.getTime();       // epoch milliseconds, UTC-based
Date.now();          // epoch milliseconds, shorthand

toISOString() sempre retorna UTC (o Z final), independentemente de onde o usuário esteja. Armazene os carimbos de data/hora em UTC e converta-os para a zona do usuário apenas para exibição.

Formatar uma data em um fuso horário específico

Para mostrar uma data em uma zona escolhida, passe timeZone para Intl.DateTimeFormat:

new Intl.DateTimeFormat("en-US", {
  timeZone: "America/New_York",
  dateStyle: "medium",
  timeStyle: "short",
}).format(new Date());
// "Jul 27, 2026, 10:03 AM"

Isso converte e formata em uma única etapa e trata o horário de verão automaticamente para a zona indicada. Não é preciso uma biblioteca de datas para esse caso comum.

Casos extremos: horário de verão, navegadores antigos e fusos horários falsificados

Algumas coisas a ter em mente antes de confiar no valor:

  • Horário de verão. O deslocamento muda ao longo do ano. Armazene sempre o nome IANA, não um deslocamento fixo, e deixe a plataforma resolver o deslocamento para uma data específica.
  • Ambientes muito antigos. Em navegadores legados onde Intl não está disponível, resolvedOptions().timeZone pode ser undefined. Recorra a getTimezoneOffset() para um deslocamento aproximado, ou detecte o recurso e degrade de forma elegante.
  • O valor pode ser alterado. O fuso horário que o JavaScript reporta vem do sistema operacional e do navegador, e um usuário pode alterá-lo. Navegadores antidetecção e frameworks de automação podem sobrescrevê-lo por completo.

Esse último ponto é onde isso deixa de ser um detalhe de formatação e passa a ser um sinal de segurança.

Por que o fuso horário do navegador é um sinal de fraude e fingerprinting

O fuso horário é um dos sinais que entram no device fingerprinting. Sozinho, ele é de baixa entropia, mas se torna poderoso em combinação com, e em contradição a, outros sinais:

  • Fuso horário versus geolocalização por IP. Se o IP da conexão geolocaliza em um país mas o navegador reporta um fuso horário do outro lado do mundo, essa incompatibilidade é um sinal clássico de VPN, proxy ou de um bot rodando em infraestrutura alugada. Essa é uma entrada central para a detecção de viagem impossível e a detecção de VPN.
  • Fuso horário versus idioma e TLS. Um perfil humano coerente tem um conjunto de sinais consistente. Uma zona Europe/London reportada junto de uma localidade e de uma impressão digital TLS que não combinam é o tipo de contradição que a fraude automatizada produz.
  • Um valor falsificado é, por si só, um sinal. Quando o fuso horário reportado ao JavaScript diverge de outras medições de tempo, essa inconsistência denuncia um navegador antidetecção em vez de um usuário real.

É por isso que uma credencial roubada usada a partir da máquina de um invasor, ou um agente de IA controlando um navegador headless, muitas vezes se entrega no fuso horário: o valor ou contradiz a rede ou é limpo demais para ser real. A cside lê o fuso horário do navegador junto de mais de 100 outros sinais para pegar exatamente essas incompatibilidades, alimentando em tempo real as decisões de tomada de conta e de detecção de bots.

Leitura adicional

Mike Kutlu
Client-Side Security Consultant

Client-side security consultant at cside. 10+ years of experience implementing technology solutions for enterprises (previously at Oracle, Cloudflare, and Splunk). Now helping teams use client-side intelligence to catch & reduce fraud.

FAQ

Frequently Asked Questions

Chame Intl.DateTimeFormat().resolvedOptions().timeZone. Ele retorna o nome de fuso horário IANA do navegador, como America/New_York ou Europe/London, em todos os navegadores modernos. Nenhuma biblioteca é necessária.

new Date().getTimezoneOffset() retorna a diferença em relação ao UTC em minutos, mas com o sinal invertido: uma zona que é UTC-5 retorna 300, não -300. Além disso, ele só informa o deslocamento atual, que muda com o horário de verão, e não em qual zona o usuário está. Intl.DateTimeFormat().resolvedOptions().timeZone retorna o nome IANA estável, que é o que você quer armazenar ou usar como sinal.

Ele pode ser lido de forma confiável, mas também pode ser falsificado. Um usuário pode mudar o fuso horário do sistema operacional, e navegadores antidetecção e ferramentas de automação podem sobrescrever o valor retornado ao JavaScript. É por isso que os sistemas de fraude comparam o fuso horário reportado com outros sinais, como a geolocalização por IP e a impressão digital TLS, em vez de confiar apenas nele.

Monitore e proteja seus scripts de terceiros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comece grátis ou experimente o Business com um teste de 14 dias.

Interface do painel cside mostrando monitoramento de scripts e análises de segurança
Related Articles
Agende uma demonstração