Обработка смещения часового пояса в PHP с отметкой времени UNIX

У меня есть таблица «уведомлений», которые могут быть отправлены или не отправлены в любой 24-часовой период. Каждое уведомление имеет собственное смещение часового пояса от GMT, поэтому у меня есть столбец для смещения, который будет +/- в секундах.

Мне нужно создать PHP-скрипт, который будет регулярно (via cron) проверять базу данных на наличие отправленных уведомлений, а затем сбрасывать их на неотправленные, если их время прошло 00:00 для этого дня. Я действительно борюсь с лучшим способом сделать это - есть ли простой расчет, который я могу сделать?

Я думал о том, чтобы получить время UNIX для полуночи сервера с помощью mktime() [мой сервер находится в GMT] и вычислить его со смещением в секундах, но все, что я думаю, кажется неправильным.

Что-то типа:

if(!mktime()-$notifcationTimezone > $serverMidnight){}

Я не говорю, что это не работает, но я не думаю, что это сработает, когда сервер перейдет в другой день. Это просто смущает меня, и я не верю в это.


person mootymoots    schedule 05.12.2010    source источник
comment
пожалуйста, покажите нам все способы, которые вы пробовали раньше, и почему они не работают...   -  person ajreal    schedule 05.12.2010


Ответы (1)


Разве это не простое сравнение с strtotime, и вам даже не нужно добавлять смещение. Вы можете использовать функцию даты, чтобы установить конкретное время, которое вы хотите передать в strtotime, которое вы хотите использовать для сравнения.

Чтобы дать нам лучшее представление, покажите нам реальный пример из вашей базы данных и как выглядит cron прямо сейчас.

Я не совсем уверен, что вы пытаетесь здесь вытащить, но о чем вы могли бы подумать, так это о том, действительно ли вы хотите что-то сбросить, нужно ли это? Вы можете заполнить дату, когда ваше уведомление было отправлено. Если он не совпадает с сегодняшней датой, вы хотите отправить его еще раз?

person Michael    schedule 05.12.2010
comment
Как я sed, попробуйте сравнить с помощью strtotime (strtotime (notificationdate) ‹ strtotime (now)) сделать сброс - person Michael; 05.12.2010
comment
У меня уже есть временные метки unix — зачем мне strtotime? Все, что у меня есть, уже в секундах... - person mootymoots; 05.12.2010