我正在为我的博客使用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分钟”,由于某种原因提前一小时。
任何人都知道我在这里做错了吗?
答案 0 :(得分:10)
这里有猜测,所以我可能错了。
问题是您指定的测试时间间隔的偏移量为0
,因此它与UTC相同 - 但 与您在GMT中跟踪DST的时间不同时区 强>
GMT与UTC相同,即偏移量为0
。但是,您提到夏令时,当遵循夏令时时,您的时钟向前移动1小时,您的UTC偏移也是如此。因此,就UTC而言,您现在的时间实际上是UTC + 0100
。这就是额外时间的来源。
毕竟,将所有时间转换为UTC可能会有所帮助,这就是它的用途,对吧?跟随夏令时的02:30 GMT
是01: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,然后在显示时转换为本地时区。