【问题标题】:UNIX_TIMESTAMP no workingUNIX_TIMESTAMP 没有工作
【发布时间】:2013-01-08 17:03:07
【问题描述】:

在我的数据库中,我有记录:'2013-01-24 16:40:08'

在 PHP 上使用函数 strtotime,我得到时间戳 1359045608

执行查询:

SELECT UNIX_TIMESTAMP(my_timestamp_column) FROM my_table WHERE my_id_column = my_id

我得到时间戳 1359056408 而不是时间戳 1359045608

转换1359056408,我得到'2013-01-24 19:40:08',为什么!?

【问题讨论】:

  • 这将是时区差异......
  • @martin Clayton 我在哪里配置?
  • 这个问题根本不值得 2 票。
  • 以 GMT/UTC 格式存储所有内容怎么样?
  • 在我的数据库中,我使用 GMT - 3,但是,使用函数 UNIX_TIMESTAMP,数据库获取 GMT 值。

标签: php mysql database timestamp


【解决方案1】:

我解决了我的问题:

SELECT UNIX_TIMESTAMP(my_timestamp_column) + TIMESTAMPDIFF(second, UTC_TIMESTAMP(), NOW())
FROM my_table
WHERE my_id_column = my_id

【讨论】:

    【解决方案2】:

    我怀疑它们设置为不同的时区。

    比较你的 MySQL 时间和你的 PHP 系统时间:

      SELECT NOW();
    

    对比

      <?php
          $date = date('Y-m-d H:i:s');
           echo $date;
    

    他们可能会休息 2 小时。

    【讨论】:

    • 立即选择(); = 2013-01-24 17:21:12,但是... SELECT UNIX_TIMESTAMP('2013-01-24 17:21:12') = 1359058872,转换 1359058872 = 2013-01-24 20:21:12跨度>
    【解决方案3】:

    我敢打赌,您正在将时间戳转换回 PHP 中的日期。

    查看时间戳的差异:1359056408 - 1359045608 = 10800

    现在除以60 秒/分钟和60 分钟/小时:

    10800 / 60 = 180
    180 / 60 = 3
    

    这意味着您所在的时区与 UTC 时间相差 3 小时。 您应该使用可以在 UTC 中生成时间戳的函数,或者(如果是这种情况)您应该使用“感知”或不受时间局部性问题影响的日期时间存储格式。

    【讨论】:

    • 你到底想用这个时间戳做什么?你想显示它吗?请注意,您的 PHP 和 MySQL 服务器必须正确设置为相同的时区。否则你总是会在 PHP 和 DB 时间戳之间得到一些差异。
    • 我需要PHP生成的时间戳等于MySQL上的unix_timestamp函数生成的时间戳。我可以在哪里配置时区?
    • 这取决于您可以访问的服务器。如果是 PHP - 请参阅 PoX 的答案。如果是 DB - 请参阅此答案:stackoverflow.com/a/10251943/1820695
    【解决方案4】:

    如果您在数据库上使用 GMT,您可以通过设置 php 以使用相同的时区 date.timezone 在 php 中见 date.timezone 这样strtotime 应该使用指定的时区。

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2020-07-19
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多