проверьте, находится ли время (с часовым поясом) в заданном интервале времени

Мне нужно ежедневно отправлять напоминания 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'