-
Прочетете за поддръжка на часови зони в MySQL и се уверете, че вашата база данни mysql е конфигурирана с текущите таблици на часовите зони. Актуализирайте редовно.
-
Свържете всяко местоположение с наименована часова зона на IANA/Olson, като например
"America/Los_Angeles"
, или"Europe/London"
. Вижте списъка тук . Ако имате ширина/дължина, можете да търсите часовата зона чрез един от тези методи . -
Използвайте MySQL
CONVERT_TZ
функция за преобразуване на текущото UTC време в конкретната зона. НапримерCONVERT_TZ(UTC_TIMESTAMP(),'UTC','Asia/Tokyo')
-
Използвайте деня от седмицата и часа на конвертирания време за проверка спрямо деня и обхвата в записа на местоположението.
Също така, имайте предвид, че други може да предложат подход за съхраняване само на UTC в базата данни или на конвертиране на всички стойности в UTC, преди да се сравнят със стойността "сега". Всеки от тези подходи може да се провали в крайни случаи, тъй като UTC денят от седмицата не е непременно същият ден от седмицата като във всяка часова зона.
Един друг подход, който ще работа, но изисква повече усилия, е предварително да се определят конкретните начални и крайни часове по UTC за известен период от време в бъдеще (поне до следващия, но може би по-нататък). След това можете да сканирате този списък с UTC времето. Това работи по-добре в мащаб, когато имате хиляди или повече отделни записи за проверка. Но в по-малки мащаби обикновено не си струва режийните разходи.
По същия начин бихте могли да имате фонов процес, който просто задава флаг „сега отворен“ на всеки запис, но той трябва постоянно да работи с вашата база данни и никога не бихте могли да проверявате за други времена освен „сега“.