我有一个时区不匹配我需要在表格中纠正。在unix时间戳1253568477之前的所有日期和时间需要将5个小时添加到它们的值以使它们等于GMT。
我有以下专栏......
date
(数据类型date
),关闭-5小时
time
(数据类型time
),关闭-5小时
timestamp
(数据类型int
),此列是正确的时间
时区关闭的原因是因为我在插入行时设置值的方式......
$sql = "insert into email_opens (userid, email, serial, date, time, timestamp) values (
'$userid',
'$opened_by',
'$serial_number',
now(),
now()',
'".gmmktime()."'
)";
now()
值使用服务器时区(东部),而gmmktime
值指定GMT。我已经将此查询更正为始终使用GMT。
对于时间戳<行的那些行,我是否可以为time
和date
列添加5小时的方法1253568477在一个批处理查询中?
澄清:
我的目标是通过为每个值添加5小时来更新表中每个不正确的行。
答案 0 :(得分:0)
试试这个:
UPDATE mail_opens SET date = DATE_ADD(CONCAT(date, ' ', time), INTERVAL 5 HOUR), time = DATE_ADD(CONCAT(date, ' ', time), INTERVAL 5 HOUR);
然后你可能需要这个:
<?php
echo date('Y-m-d H:i:s')."<br>";
$addhours = strtotime('+5 hour');
echo $addhours."<br>";
$newdate = date('Y-m-d H:i:s', $addhours);
echo $newdate;
?>
所以,使用它:
<?php
$addhours = strtotime('+5 hour');
$newdate = date('Y-m-d H:i:s', $addhours);
$sql = "insert into email_opens (userid, email, serial, date, time, timestamp) values (
'$userid',
'$opened_by',
'$serial_number',
'$newdate',
'$newdate',
'".gmmktime()."'
)";
?>
答案 1 :(得分:0)
当然,请确定纠正问题的时间,这样您才知道只更新值小于时区更改的unix时间戳的记录。
然后更新字段并为这些记录添加60 * 60 * 5(5小时(秒))。
因此,您的查询将如下:
UPDATE email_opens SET timestamp = (timestamp + 18000) WHERE timestamp < 1253568477;
冷却。