<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie n'a rien à voir avec le texte principal de l'article</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment">### timezone_open Coordination fonctionnelle date_default_timezone_set Lors de la définition du fuseau horaire,À quels détails et les pièges communs devraient être prêts attention</span></span><span>
Utilisé PHP Lors des opérations d'heure et de date,La gestion du fuseau horaire est une exigence très importante et commune。`timezone_open` et `date_default_timezone_set` sont deux fonctions liées au fuseau horaire,Le premier est utilisé pour créer un objet de fuseau horaire,Ce dernier est utilisé pour définir le fuseau horaire par défaut。Cependant,Dans leur utilisation,仍然有一些细节et常见的坑需要特别注意。
</span><span><span class="hljs-comment">#### 1. `timezone_open` Utiliser</span></span><span>
`timezone_open` Les fonctions sont utilisées pour créer un nouvel objet de fuseau horaire。Sa syntaxe est très simple:
```php
</span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$timezone</span></span><span>)
</span></span>
Où, le paramètre $ fuseau est une chaîne représentant le nom du fuseau horaire (par exemple: "Asie / Shanghai", "Europe / Londres", etc.). Après avoir appelé cette fonction, il renvoie un objet DateTimeZone .
Notes:
Si le Timezone_open entrant renvoie false si le nom du fuseau horaire entrant est incorrect, assurez-vous donc que la chaîne de fuseau horaire est correcte. Vous pouvez obtenir toutes les listes de fuseaux horaires disponibles via la fonction Timezone_Identifiants_List () .
Cette fonction n'affecte pas le fuseau horaire par défaut PHP et renvoie uniquement un objet DateTimeZone , que nous utilisons généralement lors de la création d'objets Date and Heure.
<span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$timezone</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fuseau horaire non valide"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fuseau horaire a été défini avec succès"</span></span><span>;
}
</span></span>
Date_default_timezone_set est une fonction de réglage globale qui définit le fuseau horaire par défaut des scripts PHP. Une fois défini, ce fuseau horaire affectera toutes les fonctions liées à la date et au temps, telles que date () , strtotime () , etc.
<span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>
Cette fonction peut être appelée plusieurs fois dans un script, et les paramètres de ce dernier l'emportent sur le premier. Veuillez noter:
Cette fonction est valable pour toutes les fonctions de temps ultérieures du script actuel, mais n'affecte pas les paramètres du système.
Si vous utilisez également date_default_timezone_set pour définir le fuseau horaire lorsque vous utilisez l'objet DateTimeZone créé par Timezone_Open , cela peut provoquer une confusion, surtout si le fuseau horaire est incohérent.
Un problème courant est que vous pouvez rencontrer des conflits de fuseau horaire lorsque vous définissez le fuseau horaire en utilisant un temps de temps_set_open et date_default_timezone_set . Par exemple, Timezone_Open crée un objet de fuseau horaire, mais vous utilisez date_default_timezone_set pour modifier le fuseau horaire par défaut, ce qui peut provoquer des incohérences à la date et à l'heure.
<span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</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">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Europe/London'</span></span><span>); </span><span><span class="hljs-comment">// Créer différents objets de fuseau horaire</span></span><span>
</span><span><span class="hljs-comment">// Créer un objet DateTime,Il peut y avoir de la confusion</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$timezone</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>
À ce stade, le résultat de sortie de l'objet DateTime peut être incompatible avec celui attendu, car il est affecté par les paramètres de fuseau horaire par défaut et de fuseau horaire_Open_OPEN en même temps.
Solution:
Assurez-vous de passer explicitement dans l'objet Timezone lorsque vous devez utiliser Timezone_open sans compter sur les paramètres globaux du fuseau horaire par défaut.
<span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Europe/London'</span></span><span>);
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$timezone</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>
Lorsque vous utilisez Timezone_Open pour créer un objet de fuseau horaire à plusieurs endroits, cela peut causer des problèmes s'il est incorrectement réutilisé. Chaque fois que vous utilisez Timezone_Open , un nouvel objet DateTimeZone est créé. Pour certains projets complexes, cela peut entraîner des problèmes de gestion des fuseaux horaires incohérents.
Solution:
Vous pouvez utiliser le mode Singleton ou les variables globales pour gérer les objets de fuseau horaire pour vous assurer que les fuseaux horaires utilisés dans l'application sont cohérents.
<span><span><span class="hljs-comment">// Une simple gestion du fuseau horaire mondial</span></span><span>
</span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-comment">// Réutiliser l'objet de fuseau horaire dans le code ultérieur</span></span><span>
</span><span><span class="hljs-variable">$date1</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$timezone</span></span><span>);
</span><span><span class="hljs-variable">$date2</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">"now"</span></span><span>, </span><span><span class="hljs-variable">$timezone</span></span><span>);
</span></span>
Parfois, même si vous définissez le fuseau horaire correctement dans votre code, les paramètres du fuseau horaire dans le fichier de configuration de PHP (PHP.ini) peuvent affecter le traitement du fuseau horaire. Vous pouvez vérifier les paramètres de fuseau horaire actuels via Phpinfo () .
<span><span><span class="hljs-title function_ invoke__">phpinfo</span></span><span>();
</span></span>
Assurez-vous que l'élément de configuration Date.TimeZone est cohérent avec les paramètres du fuseau horaire dans le code pour éviter l'environnement PHP et l'inadéquation du code.
Utilisez des paramètres de fuseau horaire unifié: si vous devez utiliser plusieurs fuseaux horaires dans votre application, il est recommandé de définir un fuseau horaire global via Date_default_timezone_set pendant l'initialisation, puis utilisez des opérations Timezone_Open pour les opérations spécifiques pour écraser, plutôt que de mélanger les deux à volonté.
Évitez la modification fréquente du fuseau horaire par défaut: si ce n'est pas nécessaire, n'appelez pas fréquemment Date_default_timezone_set , car cela affectera la fonction temporelle globale.
Mettre à jour les données du fuseau horaire: les données du fuseau horaire changent de temps à autre pour garantir que la version PHP que vous utilisez mettent à jour les données du fuseau horaire en temps opportun pour éviter des problèmes imprévisibles.
En utilisant rationnellement Timezone_Open et Date_default_timezone_set , vous pouvez mieux gérer les fuseaux horaires, éviter les erreurs de date et d'heure causées par des paramètres de fuseau horaire inappropriés, améliorant ainsi la stabilité et la précision de votre application.
<span><span><span class="hljs-comment">// Fin de code</span></span><span>
</span></span>