2012-05-15 69 views
1

我用這個方法解決了這個問題如何確定用戶的時區withount等同時間。依賴於JavaScript的

但是這種方法的一個嚴重缺點是,如果客戶端改變他的系統的時區甚至系統的時間,它就會改變。 Javascript使用操作系統時間和時區,它可以發送到服務器進行計算,這些計算也會遇到同樣的問題,即客戶端可能會欺騙您。同時我也看到Facebook上的生日不受我們的客戶改變時間或時區的影響。

在我的情況下,我需要目前的解決方案來顯示今天的生日。 由於服務器和客戶端時區的差異。早上5點半生日變化,因爲我在UTC設定UTC時區,我位於印度。我試圖用這種方法指出問題。

請建議一個解決上述錯誤的解決方案。

+1

如果您閱讀這個問題,您會知道該解決方案不起作用,並且他想要另一個解決方案。 – zebediah49

+0

@zahreelay除了zebediah49說了什麼以外,即使你已經爲了他人的利益而解決了問題,你也可以並且事實上應該發佈一個問題。 StackOverflow鼓勵你發佈一個你知道答案的問題,然後發佈你的解決方案。見http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –

+0

我建議看看http://momentjs.com/。它有能力進行數學計算(即減去5.5小時)。我也強烈建議給用戶顯示相對時間(即'timeago')。 – hafichuk

回答

0

許多網站在用戶個人資料中都有一個「時區」字段。這很簡單,但它的工作原理。

我相信Facebook或者有,或者根據用戶的位置工作。

+0

是的,如果你能告訴我Facebook是如何做到這一點的話,那會很有幫助。如何根據用戶的位置來完成。 –

3

嘗試這樣的事情......

而不是發送生日的絕對時間,相對時間發送到現在

換句話說,沒有你的服務器說「生日是在5月18日12:00」。相反,它說「生日是80小時20分鐘」。

這樣,客戶認爲它是什麼時候並不重要;只要他們的時鐘以正常速度滴答作響,他們就會看到生日是「今天」,或「兩小時內」,或者其他什麼。

通過網絡發送時差可能會失去一點精確度,但應該在一秒或更短的時間內完成,而不是大問題。

+0

有列需要顯示今天有birthay的人的名單。它必須是絕對的。它不能是相對的。 –

+0

是的,在您的數據庫中它應該被存儲爲絕對時間,但您應該能夠基於此發送相對時間給客戶端。 –