PHP, MySQL et fuseaux horaires : un guide complet
Les fuseaux horaires peuvent être un sujet complexe et déroutant, en particulier lorsque vous travaillez avec PHP et MySQL. Cet article vise à fournir une compréhension complète du sujet, en abordant à la fois la question d'origine et les points supplémentaires soulevés dans la prime.
Stockage des dates et heures dans MySQL
Pour garantir cohérence, il est recommandé de stocker toutes les dates et heures dans MySQL en UTC. Cela évite les problèmes liés à l'heure d'été (DST) et garantit que les horodatages sont traités correctement.
Choisir DATETIME plutôt que TIMESTAMP
DATIME doit être utilisé dans la plupart des cas, car il permet une plus large gamme de valeurs et offre plus de flexibilité. TIMESTAMP convient aux situations où des horodatages automatiques sont requis et où la plage de valeurs est limitée.
MySQL DATE et fuseaux horaires
Les valeurs MySQL DATE n'incluent pas l'heure ni le fuseau horaire. informations, elles ne sont donc pas affectées par les fuseaux horaires.
Insertion de valeurs à l'aide de NOW()
Lors de l'insertion de valeurs à l'aide de NOW(), assurez-vous que le fuseau horaire de la connexion MySQL est réglé sur UTC. Cela garantira que la date/heure insérée est en UTC quel que soit le fuseau horaire du serveur.
Définition du fuseau horaire utilisé par MySQL
Le fuseau horaire de la connexion MySQL doit être défini de manière persistante sur UTC , garantissant que toutes les dates et heures gérées par MySQL sont cohérentes.
Récupération des valeurs de MySQL
Les dates et heures récupérées de MySQL peuvent être transmises en toute sécurité au constructeur PHP DateTime. Spécifiez le fuseau horaire UTC pour garantir une gestion correcte.
Conversion entre les fuseaux horaires
Convertissez les DateTimes PHP dans le fuseau horaire local de l'utilisateur sur echo, en vous assurant qu'ils sont affichés dans le format correct. .
Heure d'été (DST)
L'heure d'été doit être gérée par les fuseaux horaires nommés pris en charge par PHP. En stockant les horodatages au format UTC et en les convertissant à l'écran, le système gère automatiquement les changements d'heure d'été.
Correction des données existantes sans fuseaux horaires
Si les données ont été précédemment insérées sans fuseaux horaires , il est recommandé d'utiliser la fonction CONVERT_TZ de MySQL ou d'effectuer des conversions de fuseau horaire natives du serveur lors des sélections et des mises à jour.
Sélection du fuseau horaire de l'utilisateur
Présenter aux utilisateurs une liste d'heures nommées zones à choisir. Cela leur permet de sélectionner leur emplacement et d'appliquer automatiquement les règles d'heure d'été.
Utilisation de PHP DateTimeZone pour les sélecteurs de fuseau horaire
DateTimeZone peut être utilisé pour générer une liste des heures disponibles. zones. Le code suivant montre comment afficher l'heure dans différents fuseaux horaires :
$dt = new DateTime('now', new DateTimeZone('UTC')); foreach(DateTimeZone::listIdentifiers() as $tz) { $dt->setTimeZone(new DateTimeZone($tz)); echo $tz, ': ', $dt->format('Y-m-d H:i:s'), "\n"; }
Détermination du fuseau horaire de l'utilisateur à l'aide de JavaScript
La classe Date de JavaScript peut être utilisée pour déterminer le décalage UTC de l'utilisateur en minutes, fournissant ainsi un point de départ pour affiner la liste des fuseaux horaires possibles.
Conclusion
En suivant ces directives et en tirant parti de l'ensemble d'outils modernes PHP et MySQL, vous pouvez gérer efficacement les fuseaux horaires et garantir la cohérence de vos applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!