【发布时间】:2017-07-06 00:07:40
【问题描述】:
我正在尝试更改选择语句以考虑用户本地时区,但我无法理解它。
假设选择用户时区当天的任何记录,在这种情况下,它被硬编码为 4 小时。
目前我正在使用...
SELECT * FROM {$this->burnsTable} WHERE DATE(created) = DATE(NOW() - INTERVAL 4 HOUR)
我想更改该语句以使用convert_tz,这可能吗?
【问题讨论】:
我正在尝试更改选择语句以考虑用户本地时区,但我无法理解它。
假设选择用户时区当天的任何记录,在这种情况下,它被硬编码为 4 小时。
目前我正在使用...
SELECT * FROM {$this->burnsTable} WHERE DATE(created) = DATE(NOW() - INTERVAL 4 HOUR)
我想更改该语句以使用convert_tz,这可能吗?
【问题讨论】:
MySQL 不会知道您用户的时区。您需要使用 javascript 或 可能 PHP get it,尽管最好的方法通常是让用户选择一个。在这种情况下,您可以store their choice in the database,然后 MySQL 可以知道他们的时区。然后,您可以使用 convert_tz (或简单地填充您为ADDTIME 调用提供的偏移量)。如果您使用time zone strings 设置了数据库,那么您可以存储它们并将它们与convert_tz 一起使用,或者您仍然可以通过执行类似的操作将convert_tz 与偏移量一起使用
SELECT * FROM {$this->burnsTable} WHERE DATE(CONVERT_TZ(created,'+00:00','+4:00')) = CURDATE();
您可以加入 users 表来执行此操作,但与其在可能有很多查询的情况下执行此操作,不如将时区存储在您的 PHP 用户模型中,然后只传递适当的偏移量每次都要查。
【讨论】: