Si vous avez besoin du fuseau horaire du visiteur dans le navigateur, JavaScript vous le donne en une ligne. Ce guide couvre la formule moderne en une ligne, l'ancienne approche avec getTimezoneOffset et quand utiliser chacune, comment obtenir l'heure UTC, comment formater une date dans n'importe quel fuseau horaire, les cas limites qui piègent les développeurs, et pourquoi le fuseau horaire du navigateur est aussi un signal utile de fraude et de device fingerprinting.
En bref : obtenir le fuseau horaire du navigateur en JavaScript
- La méthode moderne :
Intl.DateTimeFormat().resolvedOptions().timeZonerenvoie le nom IANA (par exempleAmerica/New_York). Cela fonctionne dans tous les navigateurs actuels et ne nécessite aucune bibliothèque. new Date().getTimezoneOffset()renvoie le décalage par rapport à UTC en minutes, mais le signe est inversé et il change avec l'heure d'été, préférez donc le nom IANA pour le stockage.- Le fuseau horaire déclaré peut être falsifié, c'est pourquoi les systèmes de détection de fraude et de bots le traitent comme un signal parmi d'autres, comparé à la géolocalisation IP et à l'empreinte TLS.
Comment obtenir le fuseau horaire du navigateur en JavaScript (la ligne unique)
La façon moderne et fiable de lire le fuseau horaire du navigateur est l'API Intl :
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// "America/New_York", "Europe/London", "Asia/Tokyo", ...
Intl.DateTimeFormat().resolvedOptions() renvoie les options de locale et de formatage que le navigateur a résolues pour l'environnement actuel, et sa propriété timeZone est le nom de fuseau horaire IANA. C'est la valeur que vous voulez presque toujours : elle est stable, lisible par les humains et indépendante du décalage actuel de l'heure d'été. Elle est prise en charge dans tous les navigateurs modernes (Chrome, Firefox, Safari, Edge).
Comment obtenir le décalage UTC avec getTimezoneOffset()
Avant que Intl ne soit largement pris en charge, l'approche courante était Date.prototype.getTimezoneOffset() :
const offsetMinutes = new Date().getTimezoneOffset();
// New York in summer (EDT, UTC-4): 240
// London in winter (GMT, UTC+0): 0
Deux choses surprennent ici. D'abord, le signe est inversé : une zone en retard sur UTC renvoie un nombre positif. getTimezoneOffset renvoie les minutes que vous ajoutez à l'heure locale pour atteindre UTC, donc UTC-4 vaut 240, pas -240. Ensuite, le décalage n'est pas le fuseau horaire. Il change deux fois par an avec l'heure d'été, et plusieurs zones différentes partagent le même décalage, vous ne pouvez donc pas en déduire le nom IANA. Utilisez le décalage pour des calculs UTC rapides ; utilisez le nom IANA pour identifier ou stocker le fuseau.
Les bases étant posées, les deux sections suivantes traitent de l'heure UTC et du formatage dans un fuseau précis, puis nous verrons pourquoi cette valeur compte pour la détection de fraude.
Comment obtenir l'heure UTC actuelle en JavaScript
UTC est indépendant du fuseau horaire du visiteur, c'est pourquoi c'est le bon format à envoyer à un serveur ou à stocker dans une base de données :
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() renvoie toujours UTC (le Z final), quel que soit l'endroit où se trouve l'utilisateur. Stockez les horodatages en UTC et convertissez-les vers le fuseau de l'utilisateur uniquement pour l'affichage.
Formater une date dans un fuseau horaire précis
Pour afficher une date dans un fuseau choisi, passez timeZone à Intl.DateTimeFormat :
new Intl.DateTimeFormat("en-US", {
timeZone: "America/New_York",
dateStyle: "medium",
timeStyle: "short",
}).format(new Date());
// "Jul 27, 2026, 10:03 AM"
Cela convertit et formate en une seule étape et gère l'heure d'été automatiquement pour le fuseau nommé. Aucune bibliothèque de dates n'est nécessaire pour ce cas courant.
Cas limites : heure d'été, anciens navigateurs et fuseaux horaires falsifiés
Quelques points à garder à l'esprit avant de vous fier à la valeur :
- Heure d'été. Le décalage change au cours de l'année. Stockez toujours le nom IANA, pas un décalage fixe, et laissez la plateforme résoudre le décalage pour une date donnée.
- Environnements très anciens. Dans les navigateurs hérités où
Intln'est pas disponible,resolvedOptions().timeZonepeut êtreundefined. Repliez-vous surgetTimezoneOffset()pour un décalage approximatif, ou détectez la fonctionnalité et dégradez proprement. - La valeur peut être modifiée. Le fuseau horaire que JavaScript rapporte provient du système d'exploitation et du navigateur, et un utilisateur peut le changer. Les navigateurs anti-détection et les frameworks d'automatisation peuvent le remplacer purement et simplement.
Ce dernier point est celui où l'on passe d'un détail de formatage à un signal de sécurité.
Pourquoi le fuseau horaire du navigateur est un signal de fraude et de fingerprinting
Le fuseau horaire est l'un des signaux qui entrent dans le device fingerprinting. Seul, il est de faible entropie, mais il devient puissant en combinaison avec, et en contradiction avec, d'autres signaux :
- Fuseau horaire contre géolocalisation IP. Si l'IP de la connexion se géolocalise dans un pays mais que le navigateur rapporte un fuseau horaire à l'autre bout du monde, cette incohérence est un signe classique de VPN, de proxy ou d'un bot tournant sur une infrastructure louée. C'est une donnée essentielle pour la détection de voyage impossible et la détection de VPN.
- Fuseau horaire contre langue et TLS. Un profil humain cohérent possède un ensemble de signaux cohérent. Une zone
Europe/Londonrapportée avec une locale et une empreinte TLS qui ne correspondent pas est le genre de contradiction que produit la fraude automatisée. - Une valeur falsifiée est en soi un signal. Lorsque le fuseau horaire rapporté à JavaScript est en désaccord avec d'autres mesures de temps, cette incohérence signale un navigateur anti-détection plutôt qu'un utilisateur réel.
C'est pourquoi un identifiant volé utilisé depuis la machine d'un attaquant, ou un agent IA pilotant un navigateur headless, se trahit souvent au niveau du fuseau horaire : la valeur contredit le réseau ou est trop propre pour être réelle. cside lit le fuseau horaire du navigateur aux côtés de plus de 100 autres signaux pour détecter exactement ces incohérences, alimentant en temps réel les décisions de prise de contrôle de compte et de détection de bots.








