CreepJS : rapport de fuseau et décalages
Séparez les champs de fuseau CreepJS, les calculs historiques et leur affichage de la position physique, de l’identité et du verdict d’automatisation.
BotBrowser Team
Vous voulez la documentation structurée pour Empreinte ?
Cet article fait partie de la bibliothèque éditoriale. Pour les étapes de configuration, la référence et les mises à jour continues, passez directement à la section docs.
Un rapport de fuseau CreepJS combine un identifiant de fuseau, du texte de date, des calculs historiques et des décalages de la date courante. Le nom locationMeasured ne signifie pas qu’un capteur a localisé le visiteur. BotBrowser permet de configurer fuseau, paramètres régionaux et langue, mais ne garantit pas la classification CreepJS et ne transforme pas une sortie horaire en preuve de position physique. Chaque champ exige ses entrées et son contexte de comparaison pour expliquer une incohérence du navigateur.
Résumé
locationvient de l’identifiant de fuseau du formateur par défaut ;zone, d’une partie entre parenthèses d’une chaîne Date.locationMeasuredsuit une comparaison historique et une liste fixe de villes. Ce ne sont ni des coordonnées ni une liste exhaustive des fuseaux compatibles.- La comparaison historique utilise
1113;offsetetoffsetComputedsuivent des chemins distincts de date courante. Une même mesure n’est pas répétée trois fois. - Le rendu choisit une valeur de lieu et une valeur de décalage ; en cas de différence, l’alternative correspondante est masquée.
liedhérite de réserves existantes sur des méthodes. Rapport absent, libellé modifié et réserve héritée sont des états différents.
Sommaire
- Sept champs et leurs producteurs
- Décalages historiques et recherche bornée
- Deux chemins de décalage courant
- Sélection affichée et réserves héritées
- Cas de comparaison et données utiles
- FAQ : limites du rapport de fuseau
- Conclusion pratique
Sept champs et leurs producteurs
Le module de fuseau CreepJS figé à la révision 10aa6724cd33a1015db1574211890518cd04f0cc renvoie sept propriétés nommées. Leur provenance compte davantage que leur proximité dans une carte. Un identifiant décrit des règles choisies par l’environnement ; un décalage numérique décrit une relation pour une date ; un horodatage décrit un instant produit par la construction d’une date. Réduire ces trois catégories à une réponse de « lieu » supprime la distinction nécessaire au diagnostic.
Le champ location commence par Intl.DateTimeFormat().resolvedOptions().timeZone. Aucun fuseau explicite n’est fourni au formateur. Le champ reflète donc le choix par défaut de l’environnement, et non une demande de localisation. Le module modifie ensuite la présentation : il remplace un trait de soulignement par une espace et les barres obliques par des séparateurs à virgule. Le libellé affiché n’est donc pas l’identifiant intact. Conservez séparément l’identifiant original pour comparer orthographes ou alias.
Le producteur de zone est différent. Il convertit un nouveau Date en texte et extrait la partie sélectionnée par une expression retirant les parenthèses. Ce n’est pas un second appel à resolvedOptions(). Le texte Date et un identifiant IANA peuvent porter des noms et remplir des fonctions différents sans se contredire. Une description lisible ne doit pas remplacer l’identifiant attendu par l’option timeZone d’une application.
| Champ | Producteur dans le module figé | Interprétation maximale étayée |
|---|---|---|
zone | Texte choisi dans une nouvelle chaîne Date | Description d’affichage de cette chaîne |
location | Fuseau du formateur par défaut, puis mise en forme | Identifiant déclaré présenté comme libellé |
locationMeasured | Comparaison historique et résumé conditionnel des candidats | Résultat de la comparaison définie dans le code |
locationEpoch | Conversion numérique d’une date historique locale | Horodatage historique construit |
offset | getTimezoneOffset() d’un nouveau Date | Décalage de la date représentée par cette instance |
offsetComputed | Différence entre deux chaînes de date analysées séparément | Calcul courant avec d’autres règles de construction |
lied | Première valeur vraie des réserves existantes, sinon false | Évaluation héritée, pas une nouvelle mesure de position |
L’analyse du rapport Intl CreepJS distingue échantillons formatés et collecte des paramètres régionaux des constructeurs. La carte de fuseau exige une distinction comparable, mais ses producteurs ne sont pas les six fonctions de formatage du collecteur Intl. Un libellé de date voisin ne rend pas les modules interchangeables. Révision, propriété renvoyée et ligne affichée doivent figurer dans le même relevé pour éviter d’associer silencieusement des valeurs de collecteurs différents.
locationEpoch se confond facilement avec l’heure de collecte. Le code construit une date au 1er juillet de 1113 et la convertit en nombre. Ce nombre n’est pas fourni par une API de localisation autorisée et n’enregistre pas l’ouverture du rapport. Un outil de support qui le stockerait dans une colonne « dernière visite » introduirait une erreur dans son propre modèle, même si le nombre affiché correspondait exactement à la sortie du détecteur.
Décalages historiques et recherche bornée
Le chemin historique compare deux calculs pour la même année choisie. L’un suit la construction locale de dates du système ; l’autre utilise un fuseau explicite via Intl.DateTimeFormat. Le code sélectionne 1113 et une date de juillet. Il ne compare pas directement le décalage d’aujourd’hui à un décalage historique pour déclarer une correspondance géographique. Les champs courants offset et offsetComputed sont assemblés séparément plus loin.
Lorsque les résultats historiques concordent, la réduction commence avec le fuseau déclaré lui-même. Sinon, le module recherche dans sa liste intégrée cities les entrées dont le calcul historique égale le résultat système. Il s’agit d’une collection de noms définie par le code, pas d’un annuaire géographique vivant. Ses membres font partie de la révision figée. Un fuseau absent ne devient pas un candidat découvert au seul motif que l’environnement reconnaît son identifiant.
La fonction récursive borne aussi le sens d’« ensemble correspondant ». Elle filtre la partie gauche d’une liste et renvoie un sous-ensemble correspondant lorsqu’elle en trouve un ; elle ne parcourt récursivement la droite que si ce résultat gauche est vide. Elle ne concatène pas toutes les correspondances des deux moitiés. Décrire sa sortie comme tous les fuseaux compatibles avec une observation dépasserait donc les capacités de cette recherche. Liste et stratégie limitent ensemble le sous-ensemble obtenu.
La réduction finale ne conserve un nom que si le sous-ensemble comporte un seul membre et que celui-ci égale le fuseau déclaré. Les autres résultats passent par la fonction de résumé compact du projet. Une valeur compacte dans locationMeasured n’est pas une ville découverte que le navigateur refuse de révéler. L’égalité de résumés ne prouve pas non plus l’égalité des bases complètes de fuseaux. L’appartenance originale et le contexte de recherche ne sont pas exposés par le résumé affiché.
La documentation théorique d’IANA explique la prudence supplémentaire requise pour l’historique. Son principal périmètre de compatibilité concerne les horloges concordant après 1970 ; les données antérieures peuvent être incomplètes et géographiquement limitées. Une date en 1113 permet d’étudier l’interaction de deux chemins logiciels avec leurs règles historiques, pas de valider indépendamment la position médiévale d’un visiteur. Une différence observée demanderait le contexte du navigateur, des données de l’environnement et de la construction des dates avant toute attribution causale.
Noms, règles et géographie
Les identifiants de fuseau désignent des historiques de règles associés à des lieux représentatifs. Ils ne sont pas une position GPS actuelle. Plusieurs lieux peuvent partager un décalage à un instant, et une personne peut choisir un fuseau sans rapport avec sa position présente. La comparaison des alias ICU et des fuseaux traite des noms déclarés et des décalages fixes dans un autre environnement documenté. Ses sorties ne sont pas des mesures de ce module CreepJS figé.
La limite déduite du code reste utile sans exécuter de navigateur. Une valeur locationMeasured peut être classée comme nom déclaré conservé ou résultat compact de candidats. Cette classification identifie la branche productrice ; elle ne certifie ni pays, ni trajet réseau, ni personne. Toute affirmation sur des coordonnées exige une interface produisant une position et son contexte d’autorisation, qui ne sont ni l’un ni l’autre des entrées de ce collecteur.
Deux chemins de décalage courant
Le champ direct offset lit new Date().getTimezoneOffset(). MDN définit le résultat en minutes : positif quand le fuseau local retarde sur UTC, négatif quand il avance. La date de l’instance compte, car heure d’été et règles historiques peuvent modifier le décalage selon les dates. Celui-ci doit donc rester associé à l’instant ou à la date d’obtention, plutôt que devenir une propriété permanente d’un nom de fuseau.
La fonction offsetComputed part ailleurs. Elle extrait la date d’une nouvelle sérialisation ISO, construit deux chaînes de formes différentes, soustrait leurs valeurs numériques et convertit la différence en minutes. La partie date ISO suit le jour civil UTC ; près de minuit, elle peut différer du jour local. Cette fonction ne rappelle pas simplement la méthode directe. Sa construction de date importe dans les comparaisons proches de transitions horaires.
Une forme est une chaîne ISO de date seule ; l’autre sépare mois, jour et année par des barres obliques. ECMA-262 impose l’interprétation UTC de la forme de date seule. MDN précise que l’analyse de formes non standard peut varier selon l’implémentation. Une explication du code peut nommer ces entrées, mais affirmer que tous les navigateurs analysent identiquement les barres exigerait d’autres preuves que les règles standard de date et heure. Le résultat calculé ne constitue pas une horloge de référence indépendante.
La fonction applique ~~ à la différence en minutes. Cet opérateur effectue une conversion entière ; il n’enregistre pas les millisecondes d’origine et n’ajoute pas de catégorie d’exception. Une égalité numérique après conversion est plus faible qu’une comparaison de toutes les entrées intermédiaires. Si le rapport conserve uniquement la ligne finale, une lecture plus précise du nombre ou l’ajout d’une abréviation de fuseau ne restituera pas ces détails.
Comparaisons sensibles aux transitions
Un rapport hypothétique collecté près d’un changement d’heure d’été illustre le problème des entrées. Le nouveau Date de offset et les chaînes calendaires de offsetComputed ne représentent pas nécessairement le même instant. Une différence peut donc imposer de vérifier d’abord les dates choisies, avant d’envisager une modification d’API. Il s’agit d’un cas d’interprétation, pas d’un résultat observé. Lire le code seul n’établit aucune sortie précise pour une transition donnée.
Le relevé comparatif peut lever l’ambiguïté sans conserver une empreinte complète. Gardez heure de capture, identifiant de fuseau, valeurs brutes des deux champs et révision. Si une transition est en cause, conservez les dates exactes construites. Un décalage sans date n’établit pas quelle règle saisonnière s’appliquait ; deux nombres réduits à une ligne sélectionnée ne prouvent pas que leurs producteurs concordaient.
Sélection affichée et réserves héritées
Le rendu normal n’imprime pas une paire étiquetée pour chaque comparaison. Pour le lieu, il choisit locationMeasured si les valeurs diffèrent, sinon location. Pour le décalage, il choisit offsetComputed si les valeurs diffèrent, sinon offset. Une capture peut ainsi omettre l’autre valeur précisément lorsqu’une différence existe. Déduire une concordance de la présence d’un seul nombre inverse le sens de cet affichage conditionnel.
La carte normale affiche aussi zone quand sa valeur est vraie et imprime locationEpoch. Ces choix expliquent la provenance des lignes, mais ne font pas de leur ordre un dossier diagnostique complet. Un libellé absent n’indique pas automatiquement une API de fuseau défaillante. Valeur rendue et objet sous-jacent ne contiennent pas la même information ; une comparaison de diagnostic doit garder les champs bruts nommés plutôt que leur seul ordre visuel.
La propriété lied combine trois clés de réserves déjà renseignées avec l’opérateur JavaScript ||, puis revient à false. Elle conserve le premier opérande vrai ; elle ne compte pas trois résultats. Surtout, le collecteur ne la fixe pas en testant l’égalité de offset et offsetComputed, ni la ressemblance du lieu affiché avec un nom de ville. Réserve héritée et différence locale sont des observations distinctes.
Si le bloc extérieur de collecte lève une exception, le module enregistre l’échec, capture l’erreur et ne renvoie aucun objet de rapport. Le rendu détecte l’absence de fp.timezone et sélectionne l’annotation blocked. Cette annotation n’identifie pas à elle seule le constructeur, l’analyse, l’accès à une propriété ou l’opération historique en échec. Nommer une API défaillante à partir de ce seul libellé dépasserait les preuves disponibles.
| Situation visible | Champ supplémentaire nécessaire | Conclusion disponible sans lui |
|---|---|---|
| Une seule ligne de décalage | offset et offsetComputed | Une valeur a été choisie ; l’égalité reste inconnue |
| Valeur de lieu compacte | location, locationMeasured et révision | Un résumé du code est affiché, pas des coordonnées |
| Style de réserve sur la carte | Entrée à l’origine de la réserve | Une évaluation héritée affecte l’affichage |
| Carte blocked | Présence du collecteur et contexte d’erreur capturé | L’objet normal était indisponible dans cette branche |
Cas de comparaison et données utiles
Une description zone changée avec un identifiant stable relève du texte. Il faut examiner la différence entre texte Date et producteur consigné de location, pas y voir deux appareils situés dans des régions différentes. Un identifiant changé concerne plutôt résolution et configuration du formateur. Ces situations appellent des vérifications différentes, même si elles sont toutes deux qualifiées informellement de « changement de fuseau ».
Un location conservé avec locationMeasured modifié concerne la comparaison historique ou la réduction de la liste fixe. Les premiers éléments à comparer sont révision CreepJS et données horaires de l’environnement, pas un nouveau récit de déplacement du visiteur. Une modification de locationEpoch concerne aussi la date historique construite. Séparer ces propriétés évite de convertir une différence de données logicielles en voyage réel injustifié.
Un offset modifié avec des noms stables peut respecter des règles dépendantes de la date. Le relevé doit conserver les dates pour distinguer changement saisonnier et modification de configuration. Inversement, un décalage identique ne prouve pas un ensemble de règles identique : un instant ne décrit pas toutes les transitions historiques ou futures. La comparaison utile porte sur un champ nommé avec des entrées définies, pas sur une identité générale entre environnements.
La documentation BotBrowser décrit valeurs automatiques et substitutions explicites, avec des contrôles régionaux et linguistiques séparés. Ces réglages documentés donnent le contexte de configuration, sans certifier le calcul historique du collecteur ni l’interprétation d’un site externe. Il faut d’abord établir le réglage prévu et la valeur réellement déclarée. Changer un réglage uniquement pour retirer un libellé remplacerait l’explication de la différence par une apparence souhaitée.
Un relevé de support borné conserve révision de l’outil, date de capture, compilation du navigateur, fuseau prévu et champs nommés pertinents. Notez une absence comme telle et distinguez objet absent et description absente. Empreintes complètes brutes et navigation sans rapport ne sont pas nécessaires pour identifier la branche d’une ligne horaire. Si une erreur existe, gardez une catégorie expurgée identifiant l’opération sans collecter de contenu de page étranger au problème.
FAQ : limites du rapport de fuseau
locationMeasured utilise-t-il l’autorisation de géolocalisation ?
Le producteur figé utilise des calculs historiques Date et Intl ainsi que sa liste de villes. Il ne demande pas de coordonnées. Son nom ne prouve ni dialogue d’autorisation, ni observation GPS, ni pays actuel.
locationEpoch est-il l’heure de collecte ?
Non. Il provient de la date historique locale de juillet construite avec 1113. L’heure de capture se note séparément. Réutiliser cet horodatage historique comme heure du rapport changerait sa signification.
Un décalage courant identique valide-t-il la comparaison historique ?
Non. offset et offsetComputed suivent des chemins courants ; les candidats utilisent l’année historique choisie. Une concordance ne prouve pas celle d’autres entrées ni de l’historique complet du fuseau.
Pourquoi une capture peut-elle montrer un seul décalage malgré une différence ?
Le rendu choisit offsetComputed lorsqu’il diffère de offset, sans les imprimer séparément. L’objet brut est nécessaire pour distinguer égalité et branche de sélection en cas de différence.
lied compte-t-il les différences de fuseau ?
Le collecteur examiné hérite de la première réserve vraie parmi trois entrées de méthodes. Il ne compte pas les différences des lignes affichées. L’origine de la réserve est une preuve distincte.
La configuration BotBrowser prouve-t-elle la position physique ?
Les contrôles de fuseau, région et langue décrivent la configuration du navigateur. Ils ne donnent pas les coordonnées d’une personne et ne garantissent pas la classification d’un détecteur. Fuseau déclaré et mesure physique répondent à des questions différentes.
Sources
- CreepJS : collecteur de fuseau et rendu figés
- CreepJS : fonctions de résumé figées
- CreepJS : fonctions d’erreur figées
- MDN : Date.getTimezoneOffset
- MDN : Date.parse et entrées non standard
- MDN : DateTimeFormat.resolvedOptions
- ECMA-262 : nombres et dates
- IANA : théorie de la base des fuseaux
- BotBrowser : fuseau, région et langue
Conclusion pratique
Un rapport de fuseau est utile si les champs gardent leurs producteurs et leurs dates. Séparez identifiant résolu et texte Date du chemin historique et des deux décalages courants. Examinez les deux valeurs brutes derrière une ligne sélectionnée, puis tracez la réserve héritée avant d’attribuer une cause. Ces distinctions permettent un diagnostic concret sans transformer la sortie horaire en position physique, identité personnelle ou verdict externe d’automatisation.
Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?
Articles Connexes
Rapport Intl CreepJS : champs et valeurs absentes
IdentitéFuseau horaire, locale et langue dans les API du navigateur
EmpreinteICU : alias de fuseau et la TZ que vous rapportez
EmpreinteRapport WebGL de CreepJS : contextes et signaux
EmpreinteSignaux Math de CreepJS : lire les champs
EmpreinteDétection Android WebView avec CreepJS : limites
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.