1

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

有没有一种方法可以在一个批处理查询中为那些时间戳 < 1253568477 的行添加 5 小时time和列?date

澄清:

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

4

2 回答 2

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()."'
)";
?>
于 2009-09-21T22:14:16.043 回答
0

当然,计算出您纠正问题的时间,以便您只知道更新值小于时区更改的 unix 时间戳的记录。

然后更新该字段并将 60 * 60 * 5(以秒为单位的 5 小时)添加到这些记录。

因此,您的查询将如下所示:

UPDATE email_opens SET timestamp = (timestamp + 18000) WHERE timestamp < 1253568477;

凉爽的。

于 2009-09-21T22:26:51.707 回答