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().timeZoneretorna o nome IANA (por exemploAmerica/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
Intlnão está disponível,resolvedOptions().timeZonepode serundefined. Recorra agetTimezoneOffset()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/Londonreportada 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.








