Мне нужно ежедневно отправлять напоминания sms всем пользователям, которые должны проверить их артериальное давление в заданном диапазоне времени. Записи в моей таблице расписания:
user_id |name |checkup_time |timezone 1 | user1 | 01:30:00 | PST 2 | user2 | 03:00:00 | CST
В настоящее время я могу получить список пользователей, чье время проверки находится между current_time и (текущее время + 30 минут).
Для этого я использовал следующий запрос mysql:
$checkup_time_min = date('H:i:s'); $checkup_time_max = date("H:i:s", strtotime($currTime ."+30 minutes")); SELECT ... WHERE checkup_time BETWEEN '".$checkup_time_min."' AND '".$checkup_time_max."'
Тем не менее, я хочу, чтобы time_zone рассматривался в этом сценарии.
Я бы очень признателен за любую помощь или намеки.
заранее спасибо
Вероятно, вы захотите сохранить время в формате UTC в базе данных, это сделает запросы более логичными и понятными. Когда вы вытягиваете время из БД, вы также можете потянуть timeozne и сделать любое преобразование, необходимое в это время.
Как бы то ни было, вы можете запрашивать все значения между
$checkup_time_min +- (time conversion for given timezone)
и
$checkup_time_max -+ (time conversion for given timezone)
но вам нужно будет запустить другой запрос для каждого часового пояса. В качестве альтернативы вы можете сделать кучу операторов if, проверяющих часовой пояс, но это не намного чище.
Спасибо за указание. Я обнаружил, что CONVERT_TZ – это то, что мне нужно.
Принимая во внимание предложение Мэтта Джонсона, я изменил данные в часовом поясе столбца следующим образом: (от КНТ до -05: 00)
user_id |name |checkup_time |timezone 1 | user1 | 01:30:00 | -08:00 2 | user2 | 03:00:00 | -05:00
И код изменен на
$checkup_time_min = date('Ymd H:i:s'); $checkup_time_max = date("Ymd H:i:s", strtotime($currTime ."+30 minutes")); SELECT ... WHERE checkup_time BETWEEN CONVERT_TZ ('".$checkup_time_min ."','-05:00',timezone) AND CONVERT_TZ ('".$checkup_time_max ."','-05:00',timezone)
Примечание. Часовой пояс сервера – это CST, поэтому преобразование выполняется в '-05: 00'