【问题标题】:Server Time Problem服务器时间问题
【发布时间】:2011-02-24 17:21:51
【问题描述】:

我正在编写一个小脚本,用于将评论保存到 mysql 数据库,该数据库的字段类型为“timestamp”,默认设置为“CURRENT_TIMESTAMP”

在客户端,我使用 timeago jquery 插件 (http://timeago.yarp.com/) 获取 UTC 时间戳并将其转换为相对时间格式,例如“5 分钟前”

但是,我的服务器时间设置在不同的时区。这意味着,如果我在 4 点发表评论,则放入时间戳字段中的时间戳是服务器时间的时间戳,它落后于我的本地时间。因此,当我发布仅几分钟前的评论时,jquery timeago 插件会显示类似“四小时前”的内容

我该如何解决这个问题。我被难住了。

【问题讨论】:

    标签: php javascript jquery mysql html


    【解决方案1】:

    【讨论】:

    • 但是如何在我的查询中包含这个,就像这样:SELECT * FROM threaded_cmets WHERE parent_id = 0 order by created_at DESC
    • 首先,我会使用CONVERT_TZ 将您的所有评论时间更新为UTC(在上面的链接中搜索)。然后将您的默认评论设置更改为使用UTC_TIMESTAMP。然后将您明确提供注释时间戳的任何代码更改为使用 UTC 时间戳。然后您的 SELECT 查询将“正常工作”™
    • 如果您不想经历保持 cmets 统一的“麻烦”,您可以将 CONVERT_TZ(commentTime, 'current tz', '+00:00') 添加到您的选择查询中并使用该值而不是默认的评论时间
    【解决方案2】:

    无论您的服务器的本地时间如何,您的所有时间戳都应采用 UTC。它可能正在沿途某处被转换......例如当您检索它时。

    我将所有时间戳存储为 unixtime(无符号整数),并在需要显示时进行转换。

    【讨论】:

      【解决方案3】:

      你必须告诉mysql不要依赖你服务器的时区。 一种方法是执行以下命令:

      mysql> SET time_zone = '+00:00';
      

      这样,您的时间请求都将在 UTC 时区。

      查看此documentation 以获得更多解释。

      您的问题来自于 CURRENT_TIMESTAMP 为您提供了 mysql 服务器当前时区的时间戳。如果不设置,则mysql服务器的时区继承服务器的时区。

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 1970-01-01
        • 2011-08-14
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2011-04-26
        • 1970-01-01
        相关资源
        最近更新 更多