-
En savoir plus sur la la prise en charge des fuseaux horaires dans MySQL , et assurez-vous que votre base de données mysql est configurée avec les tables de fuseaux horaires actuels. Mettre à jour régulièrement.
-
Associez chaque emplacement à un fuseau horaire IANA/Olson nommé, tel que
"America/Los_Angeles"
, ou"Europe/London"
. Reportez-vous à la liste ici . Si vous avez lat/lon, vous pouvez rechercher le fuseau horaire via l'une de ces méthodes . -
Utilisez le MySQL
CONVERT_TZ
fonction pour convertir l'heure UTC actuelle dans la zone spécifique. Par exemple,CONVERT_TZ(UTC_TIMESTAMP(),'UTC','Asia/Tokyo')
-
Utilisez le jour de la semaine et l'heure de la conversion le temps de vérifier par rapport au jour et à la plage dans l'entrée de l'emplacement.
Notez également que d'autres peuvent suggérer de ne stocker que l'UTC dans la base de données ou de convertir toutes les valeurs en UTC avant de les comparer à la valeur "maintenant". L'une ou l'autre de ces approches peut échouer dans les cas extrêmes, car le jour de la semaine UTC n'est pas nécessairement le même jour de la semaine que dans chaque fuseau horaire.
Une autre approche qui sera travail, mais demande plus d'efforts, consiste à prédéterminer les heures de démarrage et d'arrêt UTC spécifiques pour un certain temps dans le futur (au moins jusqu'au suivant, mais peut-être plus loin). Ensuite, vous pouvez scanner cette liste avec l'heure UTC. Cela fonctionne mieux à grande échelle, lorsque vous avez des milliers d'entrées individuelles ou plus à vérifier. Mais à plus petite échelle, cela ne vaut généralement pas la surcharge.
De même, vous pourriez avoir un processus d'arrière-plan qui définit simplement un indicateur "maintenant ouvert" sur chaque enregistrement, mais il devrait constamment travailler sur votre base de données, et vous ne pourriez jamais vérifier d'autres heures que "maintenant".