jQuery.timeago插件的时区问题

时间:2011-05-31 01:31:38

标签: jquery timestamp timeago

我正在为我的博客使用timeago jQuery插件,但是时间本身似乎存在问题,我无法指出问题的原因是什么。

它目前在2011年5月31日当地时间2011年02:30(GMT + DST)。现在我使用的示例日期是... 2011年5月31日02:01。以下标签为

<abbr class="timeago" title="2011-05-31T02:01:44+00:00">May 31st, 2011</abbr>

然而jQuery输出的日期是“从现在起32分钟”,由于某种原因提前一小时。

任何人都知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:10)

这里有猜测,所以我可能错了。

问题是您指定的测试时间间隔的偏移量为0,因此它与UTC相同 - 但 与您在GMT中跟踪DST的时间不同时区

GMT与UTC相同,即偏移量为0。但是,您提到夏令时,当遵循夏令时时,您的时钟向前移动1小时,您的UTC偏移也是如此。因此,就UTC而言,您现在的时间实际上是UTC + 0100。这就是额外时间的来源。

毕竟,将所有时间转换为UTC可能会有所帮助,这就是它的用途,对吧?跟随夏令时的02:30 GMT01:30 UTC。因此,与此相比,02:01 UTC的测试时间戳将来约半小时 - 因此32 minutes from now

如果您希望看到30 minutes ago,那么您的测试日期应为2011-05-31T01:01:44+00:00,以便表示相当于02:01 的时间的UTC时间戳你的时钟显示


最安全的解决方案是始终使用UTC时间戳 - 这就是SO,Facebook和Twitter如何约会他们的帖子。然后可以为每个用户的时区明确地解释和格式化UTC时间戳。

那么,你的工作就是确保你使用的时间戳不仅仅是你在钟面上看到的,而是相当于它的UTC - 在你当前的时区,UTC时间可能落后于时间1小时显示。根据您用于生成HTML的内容,您应该能够找到一个内置于语言/平台或作为第三方库的函数,它将为您提供与当前时间相同的UTC。考虑到DST,你的时区在你的时区。

答案 1 :(得分:0)

  

目前2011年5月31日02:30   当地时间(格林威治标准时间+夏令时)。

你没有说DST是什么,我会假设它是+ 1h,与上面的no.good.at.coding相同

  

现在我使用的示例日期是......   2011年5月31日02:01。下列   标签为

     

2011-05-31T02:01:44 + 00:00

您在 02:30 01:30 UTC 。您的日期来自 02:01 UTC 03:01 您的时间,然后是将来的半小时。

根据建议,您应该将所有日期保存为UTC。例如,Python有一个datetime.utcnow()方法。始终保存为UTC,然后在显示时转换为本地时区。