2011-02-24 135 views
0

我有一个小脚本我工作的节省到MySQL数据库评论,有型“时间戳”的领域和默认数据库设置为“CURRENT_TIMESTAMP”服务器时间问题

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

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

如何解决此问题。我很难过。

回答

1

无论服务器的本地时间如何,您的所有时间戳都应为UTC。它可能正在转换某处...因为你正在检索它。

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

1
+0

但我如何在我的查询中包含这个,就像这样:SELECT * FROM threaded_comments WHERE parent_id = 0 order by created_at DESC – Hirvesh

+0

首先,我会使用'CONVERT_TZ'将其所有评论时间更新为UTC(搜索它在上面的链接)。然后更改您的默认评论设置以使用'UTC_TIMESTAMP'。然后,将显式提供注释时间戳的任何代码更改为使用UTC时间戳。然后,如果您不想通过使您的评论保持统一的'麻烦',那么您的SELECT查询将“正常工作”™ – DTest

+0

,您可以将CONVERT_TZ(commentTime,'current tz','+00:00')添加到您的选择查询并使用该值而不是默认的commentTime – DTest

0

你必须告诉mysql不依赖于服务器的时区。 一种方式做到这一点是执行以下命令:

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

这样,随着时间的推移您的要求都将在UTC时区。

检查此documentation进一步的解释。

您的问题来自CURRENT_TIMESTAMP为您提供mysql服务器当前时区的时间戳的事实。如果没有设置,mysql服务器的时区会继承服务器的时区。