2016-05-29 46 views
1

我有一个表,其中有一列名为date_time。它包含一个unix时间的数字。事情是这样的:如何在本地正确设置UNIX_TIMESTAMP?

// mytable 
+----+------------+ 
| id | date_time | 
+----+------------+ 
| 1 | 1464499385 | -- 19 days ago 
+----+------------+ 
--     ^these are based on current time which is 1464566088 

而且,这里是我的查询:

SELECT id, 
     (CASE WHEN FROM_UNIXTIME(date_time) >= CURDATE() THEN 'today' 
      WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesteray' 
      WHEN FROM_UNIXTIME(date_time) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week' 
      ELSE 'in last month or more' 
     END) as `range` 
FROM mytable 
WHERE 1; 

上述当地查询的结果是不一样的on fiddle

地方:enter image description here

正如你看到的地方,结果是yesterday和小提琴是today。为什么有一个不同的,我该如何解决它?


注:,当我在本地和小提琴选择UNIX_TIMESTAMP,是有不同的。

SELECT UNIX_TIMESTAMP(); -- 1464566511 (on local) 
SELECT UNIX_TIMESTAMP(); -- 1464562972 (on fiddle) 

那么我该如何设置相同?

回答

2

Sql小提琴服务器处于不同的时区。

采取“UTC - 你的时区”和减去从你的时间戳许多间隔时间

您可以区别使用CONVERT_TZ转换:

SELECT CONVERT_TZ(datetime,'+00:00','-10:00'); 

Convert _TZ MySql文件

您可以谷歌时间在UTC并采取差异或您可以设置全球tinezone到您的本地some support on that

+0

谢谢你的exp lanations。 +1 –