在MySQL中更正日期和时间列

时间:2009-09-21 22:05:25

标签: php mysql timezone adjustment

我有一个时区不匹配我需要在表格中纠正。在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。

对于时间戳<行的那些行,我是否可以为timedate列添加5小时的方法1253568477在一个批处理查询中?

澄清:

我的目标是通过为每个值添加5小时来更新表中每个不正确的行。

2 个答案:

答案 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;

冷却。