我需要更新events
表中的所有行。列event_date
有时间戳数据类型。
但是如果我用新日期更新每一行(event_date
列)(例如:2015-12-12 12:00:00),那么我有一些值为2015-12-12 13:00的行: 00。
点是 - 为什么有些行是正确的,有些是+ 1h?
在PHP中我使用Nette框架和他的DateTime对象,它扩展了标准PHP DateTime ...
任何想法,提示为什么会这样?
编辑:查询如下所示:
UPDATE `events`
SET `event_date`='2016-2-13 12:00:00', `event_date_to`=NULL
WHERE (`id` = 203)
php中的值我设置如下:
$row->event_date = date("Y-m-d H:i:s", $oldRow['event_date']);
问题很快就开始了 - 在这张表中的日期是2016-2-13 00:00:00但是在选择和回音日期改为2016-2-12 23:00:00之后 - 但是没有所有行...仅某人。所以我选择:
select events.id, events.event_date, events.event_date_to,
concat(year(event_date), '-', month(event_date), '-',
day(event_date), ' 12:00:00') as new_event_date,
IF(events.event_date_to IS NULL,null, concat(year(event_date_to),
'-', month(event_date_to), '-', day(event_date_to), ' 12:00:00')) as
new_event_date_to from events
那个选择给我这样的行:
769,2014-04-22 19:30:00,2014-04-22 21:45:00,2014-4-22 12:00:00,2014-4-22 12:00:00
表示:id,event_date(实际db值),event_date_to(实际db值),event_date(insert的新值),event_date_to(insert的新值 - 可以为NULL)
并保存到csv文件...这个文件我正在解析现在和foreach更新每一行......
我查了所有查询,时间还可以(12:00:00),所以我不理解并且卡住了:)
答案 0 :(得分:2)
您的MySQL时区可能与您的代码(在php.ini中指定)不同。
要对此进行测试,请尝试将此值插入DATETIME
或TIMESTAMP
列:
foo_column = NOW()
同时,将$datetime
插入单独的列中 - 假设$datetime
只是等于当前时间:date('Y-m-d H:i:s', time())
bar_column = '$datetime'
如果值不同 - 那么你就拥有它。您的数据库本质上是以不同的方式解释时间。