MySQL:使用SET time_zone设置的CURDATE()

时间:2014-06-10 01:18:28

标签: php mysql date datetime timestamp

我会根据用户的设置手动设置时区:

SET time_zone = "+02:00";

我希望从+02:00的角度来看今天价值的结果。

WHERE time >= CURDATE()

但我也从昨天开始获得价值。表中的值例如是:

2014-06-09 18:50:26

00:00时区(值存储在数据库中的时区),上面的日期是今天。但是从SET time_zone偏好来看并非如此。 +02:00将是:

2014-06-09 20:50:26

但是昨天仍然来自用户时区。

所以我不想得到这个结果

从数据库中选择时间值工作正常。它们会转换为-02:00。但是在WHERE子句中它不知道。

1 个答案:

答案 0 :(得分:0)

您可以将所有时间存储在UTC中并获取用户时区:

-- creating a test table
create table times(
    utc datetime
);

-- inserting some values 
insert into times 
     values (utc_timestamp()); -- must use utc_timestamp()

-- getting data converted for desired timezone
select utc, 
     date_add(utc,interval  '-5:00' hour_minute) as Lima,
     date_add(utc,interval  '1:00' hour_minute) as Madrid
from times;

+---------------------+---------------------+---------------------+
| utc                 | Lima                | Madrid              |
+---------------------+---------------------+---------------------+
| 2014-06-10 02:54:47 | 2014-06-09 21:54:47 | 2014-06-10 03:54:47 |
| 2014-06-10 02:55:46 | 2014-06-09 21:55:46 | 2014-06-10 03:55:46 |
| 2014-06-10 02:57:38 | 2014-06-09 21:57:38 | 2014-06-10 03:57:38 |
+---------------------+---------------------+---------------------+


-- You where clause would be and '-5:00' or '1:00' can be stored 
-- as session variable @user_timezone

where utc >= utc_timestamp()