Правильные столбцы даты и времени в MySQL - PullRequest
1 голос
/ 22 сентября 2009

У меня несоответствие часового пояса, которое мне нужно исправить в таблице. Все даты и время до отметки времени 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.

Есть ли способ добавить 5 часов к столбцам time и date для тех строк, где отметка времени <1253568477 в одном пакетном запросе? </p>

Пояснение:

Моя цель состоит в том, чтобы обновлять каждую неправильную строку в таблице с правильным временем, добавляя 5 часов к каждому значению.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2009

конечно, отработайте время, когда вы исправили проблему, чтобы вы знали, что нужно обновлять только те записи, которые имеют значение меньше, чем метка времени unix вашего часового пояса.

Затем обновите поле и добавьте 60 * 60 * 5 (5 часов в секундах) к этим записям.

Итак, ваш запрос будет следующим:

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

Cool.

0 голосов
/ 22 сентября 2009

Попробуйте с этим:

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()."'
)";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...