MySQL DAYNAME мудрый поиск данных для разных часовых поясов - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю в приложении, где мы храним расписание посещений врача в будние дни. Для этого мы поддерживаем таблицу расписания и таблицу календаря, в которой хранится дата. Вот снимок таблицы расписания enter image description here

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

select datefield as date, 
        (select count(id) 
         from appointment_schedules
         where substring(dayname(calendar.datefield),1,3) = appointment_schedules.week_day 
         and user_id=$user_id
        ) 
from calendar  
where datefield between '$start_date' and '$end_date'"

Теперь мы реализуем список встреч с часовым поясом, в котором список встреч будет отображаться на основе часового пояса пользователя. Поскольку день недели зафиксирован в таблице расписания, я не могу найти правильный способ получения данных с учетом часового пояса. Например, если разница между часовым поясом пользователя составляет 8 часов от сервера, то в определенный период пользовательский день будет опережать или отставать от сервера. Я застрял на том, как я могу показать точные данные о часовом поясе пользователя в течение одного запроса.

Любые предложения будут высоко оценены. Заранее спасибо

1 Ответ

1 голос
/ 06 ноября 2019

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

PHP:

$utc_difference = -12;
$week_day = "SUN";
$prev_week_day = "SAT";
$next_week_day = "MON";

MySQL:

WHERE 
  (DATE_SUB(start_time, INTERVAL $utc_difference HOUR) < 0 AND  week_day = $prev_week_day)
OR
  (DATE_SUB(start_time, INTERVAL $utc_difference HOUR) > 24 AND  week_day = $next_week_day)
OR 
  (DATE_SUB(start_time, INTERVAL $utc_difference HOUR) > 0 AND DATE_SUB(start_time, INTERVAL $utc_difference HOUR) < 24 AND week_day = $week_day)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...