【问题标题】:Correct Date and Time Columns in MySQLMySQL 中正确的日期和时间列
【发布时间】:2010-11-30 05:44:02
【问题描述】:

我的时区不匹配需要在表格中进行更正。在 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 小时?

澄清:

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

【问题讨论】:

    标签: php mysql timezone adjustment


    【解决方案1】:

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

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

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

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

    酷。

    【讨论】:

    • 差不多了! ..但是当我需要向日期和时间值添加 5 个 小时 时,您将在已经正确的时间戳值上添加 120 小时。
    • 你说得对,我想的是 5 天而不是 5 小时!哎呀:/
    【解决方案2】:

    试试这个:

    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()."'
    )";
    ?>
    

    【讨论】:

    • 因为我想更新现有的行,我可以把它变成一个循环的 UPDATE 语句。但是有没有一个 MySQL 语句可以在不需要 PHP 的情况下做到这一点?
    • 不错!弄乱了 date_add 函数,但缺少你的 concat 部分!好想法:)
    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2017-11-19
    • 2020-06-17
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多