【问题标题】:MySQL convert DateTime (storing a UTC_TIMESTAMP) to number of seconds 1970MySQL 将 DateTime(存储 UTC_TIMESTAMP)转换为 1970 年的秒数
【发布时间】:2011-10-21 04:06:33
【问题描述】:

有很多类似的问题,但我相信这个问题是独一无二的。 (对不起,如果不是)

我们的数据库有一个名为“date_sampled”的日期时间字段,我们用 UTC_TIMESTAMP() 存储它

我们的目标是返回自 1970 年以来的秒数。我注意到 UNIX_TIMESTAMP() 如果不提​​供任何参数,则返回当前的 UNIX_TIMESTAMP(),并且如果传递了日期时间(即 2011-10-10),它会返回一个时间戳秒。

但是 UTC_TIMESTAMP() 不能像这样工作,它返回当前的 UTC 时间戳。

那么如何在 MySQL 中将我的 DateTime 字段(保存 UTC 日期时间)转换为 1970 年的秒数?如果不能在 MySQL 中完成,那么 PHP 解决方案将起作用。

谢谢。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    MySQL 中有一个 TIMESTAMPDIFF 函数,你可以像这样使用它

    SELECT TIMESTAMPDIFF(SECOND,'1970-01-01 00:00:00', YourUTCDateFromSomewhere)
    

    文档中的更多详细信息 - http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff

    【讨论】:

    • 很好,这很有趣。我会试一试。 :)
    【解决方案2】:

    你试图让UTC_TIMESTAMP 做到UNIX_TIMESTAMP 没有做到的事情是什么?根据定义,Unix 时间戳采用 UTC。

    我假设您遇到的问题是,即使您将日期时间存储在 UTC 中,UNIX_TIMESTAMP 也会为您提供时区偏移结果,因此您会在几个小时后得到一个值你期待什么。

    UNIX_TIMESTAMP 尊重MySQL's time_zone variable,因此如果您的所有日期都是UTC,您只需将会话的time_zone 变量设置为UTC,这将导致UNIX_TIMESTAMP 在将日期时间转换为时间戳。

    SET time_zone = '+00:00'
    

    【讨论】:

    • 谢谢!这确实是我遇到的问题。现在说得通了哈哈:)
    【解决方案3】:

    有趣的问题...我不知道如何使用 SQL 来执行此操作...但 PHP 解决方案是使用 strtotime() 函数..

    <?php
    echo strtotime('2011-10-10');
    ?>
    

    上面的示例返回值 1318219200,它是自 1970 年以来经过的秒数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 2012-01-19
      • 2011-08-31
      • 2012-06-06
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      相关资源
      最近更新 更多