2011-05-31 21 views
4

我正在爲我的博客使用timeago jQuery插件,但似乎有一個與時間本身有關的問題,我不能放我的手指和問題的原因是什麼。jQuery.timeago插件的時區問題

其當前時間2011年5月31日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分」,它的提前一小時出於某種原因。

任何人都知道我在這裏做錯了嗎?

回答

10

這裏有一個猜測,所以我可能是錯的。

的問題是,timesatmp您所指定的有一個0偏移測試,以便它一樣UTC - 但在GMT時區以下DST時是不一樣的你的時間。

GMT與UTC相同,即偏移量爲0。但是,您提到DST,並且在遵守夏令時的情況下,您的時鐘會向前移動1小時,您的UTC偏移也會向前移動1小時。所以你現在的時間,就UTC來說,實際上是UTC + 0100。這就是多出一小時的地方。

它可能有助於首先將所有時間轉換爲UTC,畢竟,這就是它的目的,對嗎? 02:30 GMT,而DST後面是01:30 UTC。因此,與此相比,02:01 UTC的測試時間戳在未來大約半小時 - 因此爲32 minutes from now

如果你期望看到30 minutes ago相反,你的考試日期應當在爲了表達UTC時間戳,這是相當於02:01時間由您的時鐘顯示已經2011-05-31T01:01:44+00:00


最安全的解決方案是始終使用UTC時間戳 - 這就是SO,Facebook和Twitter的日期。 UTC時間戳然後可以被明確地解釋併爲每個用戶的時區格式化。

然後,您的工作就是確保您使用的時間戳不僅僅是您在鐘面上看到的,而是UTC等效的時間戳 - 在您當前的時區中,UTC時間可能比時間顯示。根據你使用什麼來生成你的HTML,你應該能夠找到一個內置於語言/平臺或第三方庫的函數,它會給你顯示當前時間的UTC等值您的時區中的時鐘考慮DST。

+0

您的權利,我已經將時間格式更改爲UTC,一切似乎都很好。但現在這意味着我將不得不發佈帖子,就好像它們在一小時前發佈一樣。 – Ian 2011-05-31 03:59:24

+0

@Ian如果你一整年都這樣做,那會是不正確的 - 問題是你使用你的時鐘時間,但將它發佈爲UTC。您必須執行以下操作之一1)使用正確的偏移量 - 只要遵循DST,您的日期必須具有+01:00的偏移量。2)使用實際的UTC時間戳 - 這將是您的時間-01 :00。我會建議這樣做 - 如果你搬到不同的時區,它也會工作!這就是SO,Facebook和Twitter這樣的網站如何對他們的帖子進行約會 - 使用實際的UTC時間戳,這些時間戳是針對不同用戶的時區進行格式化的。 – 2011-05-31 04:05:36

+0

@mu太短這肯定會很好 - 我從來沒有理解夏令時的需要! – 2011-05-31 04:20:38

0

其當前時間2011年5月31日02:30 當地時間(GMT + DST)。

你不說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,然後在顯示時轉換爲本地時區。