我正在一个应用程序中工作,该应用程序存储工作日的工作日安排。为此,我们维护一个计划表和一个存储日期的日历表。
这是调度表的表快照
在我们的应用程序中,当用户选择日期时,将基于该日期的日名显示医生的约会列表。现在,我正在获取日期范围明智的医生所需的数据,例如以下查询,其中未使用任何时区。
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小时,则在特定时间段内,用户日将比服务器早或晚。我被困在如何在单个查询中显示用户时区每日准确数据的问题上。
任何建议将不胜感激。
提前致谢
最佳答案
下面是一些有关如何处理它的粗略代码,虽然我尚未对此进行测试,但是它应该可以为您解决查询提供足够的信息。
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)