本地主机日期值的差异
在我的本地主机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时间戳。
您正在使用调整为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
正如我的问题,MYSQL函数在同一日期返回不同的值。这就是实际问题在使用PHP函数之前就开始的地方。 – Purus
任何想法在哪里检查MYSQL的时区? – Purus
我不知道...可能在my.cnf中?首先,我会从PHP的time()中获取时间戳,并将其插入到TIMESTAMP字段中,然后读回格式化的日期和时间。这应该让你知道MySQL服务器在什么时区运行。如果你的主机允许你覆盖默认的时区(my.cnf?你必须阅读MySQL文档),你可能可以,但是你我们可能不得不问他们发生了什么事。 –