本地主机日期值的差异

问题描述:

在我的本地主机WAMP堆栈中,我有一个数据库表,其中有一个“生日”列作为“日期 - 时间”列类型。本地主机日期值的差异

我正在为该表运行下面的SQL来获取当年的出生日期及其unix时间戳值。这里没有问题。

SELECT dateValue, 

DATE_ADD(dateValue, INTERVAL YEAR(CURDATE())-YEAR(dateValue) YEAR) "Date1", 

UNIX_TIMESTAMP(
    DATE_ADD(dateValue, INTERVAL YEAR(CURDATE())-YEAR(dateValue) YEAR) 
) "Date2" 

FROM base_date 

例如,我从SQL获得以下输出。

DATEVALUE      DATE1       DATE2 
-------------------------------+-------------------------------+----------------- 
December, 18 1980 00:00:00+0000 December, 18 2013 00:00:00+0000 1387305000 
December, 20 1985 00:00:00+0000 December, 20 2013 00:00:00+0000 1387477800 

的问题是,当我尝试显示UNIX格式在PHP中的时间戳值,日期不正确显示。有一天的变化。

echo gmdate("Y-m-d", "1387305000"); // Displays 2013-12-17 and not 2013-12-18 
echo gmdate("Y-m-d", "1387477800"); // Displays 2013-12-19 and not 2013-12-20 

混乱的部分是:

当我测试这与SQL小提琴价值,它的工作是正确的。 SQL的unix时间戳不同于我的localhost mysql(5.5.24)中的同一日期以及sqlfiddle.com(5.5.32)中的可用版本。

小提琴:http://sqlfiddle.com/#!2/25e032/3/0

可能是什么区别?它与时区或sql版本还是别的有关?

我的主机具有时区上的MySQL设置为当地时区(太平洋时间),所以一个PHP时间()值(格林尼治标准时间)放入数据库并显示为一个MySQL时间是8个小时左右。所以,这可能是你主机的MySQL配置的问题。小心混合PHP时间戳和MySQL时间戳。

+0

任何想法在哪里检查MYSQL的时区? – Purus

+0

我不知道...可能在my.cnf中?首先,我会从PHP的time()中获取时间戳,并将其插入到TIMESTAMP字段中,然后读回格式化的日期和时间。这应该让你知道MySQL服务器在什么时区运行。如果你的主机允许你覆盖默认的时区(my.cnf?你必须阅读MySQL文档),你可能可以,但是你我们可能不得不问他们发生了什么事。 –

您正在使用调整为GM时区的gmdate()。什么是你的PHP设定的默认时区?尝试更改gmdate()date()并查看它是否正常工作。

date_default_timezone_get() - >http://www.php.net/manual/en/function.date-default-timezone-get.php

gmdate()文档,你可以得到一个解释,看看例1: http://www.php.net/manual/en/function.gmdate.php

+0

正如我的问题,MYSQL函数在同一日期返回不同的值。这就是实际问题在使用PHP函数之前就开始的地方。 – Purus