1

テーブルで修正する必要のあるタイムゾーンの不一致があります。UNIXタイムスタンプ1253568477より前のすべての日付と時刻は、GMTと等しくなるように、値に5時間を追加する必要があります。

私は次の列を持っています...

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を使用するようにこのクエリを修正しました。

1つのバッチクエリでタイムスタンプが1253568477未満の行の両方timeと列に5時間を追加する方法はありますか?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 に答える