J'ai lu sur ce sujet depuis quelques heures, et je pense que j'ai une idée à ce sujet, mais j'aimerais avoir une confirmation.Meilleure façon de gérer le stockage/affichage des dates dans différents fuseaux horaires en PHP?
Situation
Je veux un utilisateur, par exemple, la Californie pour pouvoir poster un commentaire qui sera stocké dans MySQL. Je veux ensuite que le Texas, par exemple, puisse voir le commentaire avec la date de publication ajustée à son fuseau horaire.
Solution proposée
Stockage
- Exécutez la commande suivante au début de l'application afin que toutes les fonctions de date utilisent fuseau horaire UTC:
date_default_timezone_set('UTC');
$Date = new DateTime();
pour obtenir un objet DateTime avec la date et l'heure actuelles en UTC. Utilisez$Date->format()
pour obtenir la valeur à insérer dans la colonne de type datetime dans MySQL.
Affichage
- Get JavaScript de l'information fuseau horaire de l'utilisateur et le stocker dans un cookie.
- Exécutez une requête MySQL SELECT pour récupérer la valeur de la colonne datetime.
$Date = new DateTime($row['time']);
pour instancier un objet DateTime avec l'heure UTC stockée.$Date->setTimezone(new DateTimeZone($userTimezone));
pour ajuster l'heure UTC au fuseau horaire de l'utilisateur.- affichage à l'aide
$Date->format();
Est-ce que l'essentiel de ce qu'il faut faire? Est-ce que je manque une meilleure solution? Merci de votre aide!
Je pense que je vais définir le cookie fuseau horaire sur la connexion de l'utilisateur, il devrait donc mettre à jour si vous voyagez en Australie et connectez-vous à partir de là. Suggérez-vous que du JavaScript soit lancé lors du chargement de la page qui recherche des temps, par exemple, et les convertisse tous à la volée? –
La seule façon d'accéder à l'horloge utilisateur est via JS ou géo-ip. Ce dernier est complexe et peu fiable. Si vous utilisez JS dans tous les cas, le faire au moment de la connexion nécessite plus de maintenance (suivi côté serveur). Le faire à la volée a plus de sens ici. – aleemb
Merci. Comme je le recherche plus, je commence à être d'accord avec vous. –