Dans le développement mondial d'applications Web, la définition automatique du fuseau horaire de l'utilisateur est basée sur l'emplacement géographique de l'utilisateur, ce qui est un aspect important de l'amélioration de l'expérience utilisateur. PHP fournit des fonctions de traitement de fuseau horaire puissantes, Timezone_name_get est l'une des fonctions qui peuvent être utilisées pour extraire et appliquer des noms de fuseau horaire. Cet article présentera comment combiner l'emplacement géographique de l'utilisateur et la fonction Timezone_name_get pour obtenir la reconnaissance et les paramètres automatisés du fuseau horaire.
Timezone_name_get est une méthode de la classe DateTimeZone dans PHP. Son objectif est d'obtenir l'identifiant du fuseau horaire de l'objet DateTimeZone (par exemple "America / New_york" ).
<span><span><span class="hljs-variable">$tz</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-string">'Europe/London'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">timezone_name_get</span></span><span>(</span><span><span class="hljs-variable">$tz</span></span><span>); </span><span><span class="hljs-comment">// Sortir: Europe/London</span></span><span>
</span></span>
Cette fonction elle-même ne déduit pas automatiquement l'emplacement de l'utilisateur, il est simplement utilisé pour obtenir le nom de l'objet de fuseau horaire. Mais il joue toujours un rôle important dans le processus de cartographie automatique de l'emplacement géographique aux fuseaux horaires.
Pour atteindre la «reconnaissance automatique», la première étape consiste à identifier l'emplacement géographique de l'utilisateur. Cela peut généralement être réalisé via des adresses IP combinées avec des API tierces (telles que IP-API, ipinfo.io, geoip2, etc.).
<span><span><span class="hljs-comment">// Exemple:utiliser ip-api.com Service gratuit</span></span><span>
</span><span><span class="hljs-variable">$ip</span></span><span> = </span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REMOTE_ADDR'</span></span><span>];
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">"http://ip-api.com/json/<span class="hljs-subst">{$ip}</span></span></span><span>?fields=status,message,timezone");
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'status'</span></span><span>] === </span><span><span class="hljs-string">'success'</span></span><span>) {
</span><span><span class="hljs-variable">$timezoneIdentifier</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>[</span><span><span class="hljs-string">'timezone'</span></span><span>]; </span><span><span class="hljs-comment">// Par exemple: Asia/Shanghai</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// Définir le fuseau horaire par défaut</span></span><span>
</span><span><span class="hljs-variable">$timezoneIdentifier</span></span><span> = </span><span><span class="hljs-string">'UTC'</span></span><span>;
}
</span></span>
Bien que le nom de fuseau horaire obtenu à partir de l'API soit déjà dans un format standard, nous pouvons toujours utiliser Timezone_name_get pour vérifier sa validité ou l'extraire de l'objet DateTimeZone pour améliorer la robustesse du code:
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-variable">$timezoneIdentifier</span></span><span>);
</span><span><span class="hljs-variable">$validTimezoneName</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_name_get</span></span><span>(</span><span><span class="hljs-variable">$timezone</span></span><span>); </span><span><span class="hljs-comment">// Assurez-vous que le format est correct</span></span><span>
</span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-variable">$validTimezoneName</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'UTC'</span></span><span>); </span><span><span class="hljs-comment">// Si une exception se produit, elle retombera à UTC</span></span><span>
}
</span></span>
À l'heure actuelle, le fuseau horaire par défaut de PHP a été défini sur le fuseau horaire où l'utilisateur est situé. Vous pouvez utiliser des fonctions de temps telles que Date () pour afficher l'heure locale de l'utilisateur:
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Heure actuelle:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>
En combinant le service Geolocation et le Timezone_name_get de PHP, nous pouvons automatiquement définir son fuseau horaire en fonction de l'IP de l'utilisateur dans une application Web. Cela améliore non seulement l'expérience utilisateur, mais rapproche également la logique temporelle de l'application des scénarios d'utilisation réels de l'utilisateur. Il convient de noter que cette approche s'appuie sur des services externes pour fournir une emplacement IP, il faut donc noter lors du déploiement formellement et envisager d'ajouter des caches locales pour réduire les demandes et la latence.
Cette fonction de réglage du fuseau horaire intelligent est particulièrement adaptée aux scénarios tels que des sites Web multinationaux, des plateformes de commerce électronique, des systèmes de gestion des calendriers en ligne, etc. où le temps localisé doit être affiché.