0

我已将服务器的时区设置为 UTC。我的用户可以选择他们自己的时区,例如 UTC+2 等。我创建了一个查询来指示班次何时打开或关闭:

SELECT DAYNAME(NOW()), start_day
FROM Shifts
WHERE (start_day = LOWER(DAYNAME(NOW()))
       AND start_time < CURTIME()
       AND end_time > CURTIME())
   OR (start_day = LOWER(DAYNAME(DATE_SUB(NOW(), INTERVAL 1 DAY)))
       AND start_time < ADDTIME('24:00:00', CURTIME())
       AND end_time > ADDTIME('24:00:00', CURTIME()))

我想更改此查询 NOW() 和 CURTIME() 以匹配每个用户的设置。我应该如何更改我的查询,以在其中注入自定义 UTC?还有另一种方法来完成我需要的吗?

4

1 回答 1

0

CONVERT_TZ函数将解决您的问题。

  • 句法

    CONVERT_TZ(dt, from_tz, to_tz)。

    “from_tz”是您的服务器时区(在您的情况下为 UTC)。

    "to_tz"值可以作为表示从"from_tz"的偏移量的字符串给出,例如 '+10:00' 或 '-6:00'。

  • 例子:

     SELECT CONVERT_TZ('2004-01-01 12:00:00','UTC','+2:00');
     SELECT CONVERT_TZ(NOW(), 'UTC', '-5:30');
     SELECT CONVERT_TZ(NOW(), '-2:00', '+5:00')
    
于 2013-01-26T12:51:42.000 回答