MySQL时间戳列的时间戳不匹配

时间:2016-01-05 15:40:26

标签: php mysql datetime

我有一个数据库表,可以跟踪物品何时缺货以及什么时候有库存。附加列会跟踪更新任何给定记录的时间戳。 OOStock / InStock列都是日期时间,更新列只是一个时间戳,我不需要输入。

我今天检查记录以确保我的脚本正常运行,并且我注意到所有记录的时间值都不匹配,在某些情况下,日期不匹配。例如,最新记录显示某些项目在2016/1/5的1:45:06时缺货,但该记录的更新列显示2016/1/4的时间戳为18:45:06。任何给定记录的OOStock值和LastUpdate值之间总共有7个小时的差异(它只在昨天开始运行,所以没有机会用InStock列进行测试)。

我用来获取新插入的当前时间和日期的PHP代码如下:

$currentDate = date("Y-m-d H:i:s");
$start = "INSERT INTO out_of_stock (ID, OOStockTS, InStockTS, Status) VALUES (";
$end = sprintf("'%s', '%s', null, '%s')", $item->ID, $currentDate, "OPEN");
$start .= $end;
$db_controller->insert($start);

为什么会这样?它只是时区或时间戳实现的差异吗?除此之外,我的脚本按预期工作。我只是想知道为什么这些日期和时间似乎不应该匹配。

2 个答案:

答案 0 :(得分:3)

检查您的数据库是否使用与您的PHP版本不同的时区。您的PHP .ini文件将具有您设置的时区的设置。如果您在数据库上运行此代码:

SELECT @@system_time_zone;

你应该看看它们是对齐还是不匹配。

答案 1 :(得分:0)

这似乎是一个时区问题。你的PHP脚本显然在另一个TZ而不是数据库。到目前为止,哪个问题尚不清楚。只有一个建议:没有必要检索当前时间客户端,让这个由DB本身完成:

$currentDate = "NOW()";  // just use the MySql function for current TS
$start = "INSERT INTO out_of_stock (ID, OOStockTS, InStockTS, Status) VALUES (";
$end = sprintf("'%s', %s, null, '%s')", $item->ID, $currentDate, "OPEN");
$start .= $end;
$db_controller->insert($start);

这至少应该在数据库中提供一致的TS。