2009-02-14 49 views
6

我工作的一個網站,可以讓用戶添加日曆條目,在主頁上,那麼所有用戶都可以看到這些條目有一些文字說了多久,直到這些條目例如當前ASP.Net時間本地化

進入1:5分鐘
註冊2:7小時
條目3:4天

我遇到的問題是,每個人都可以在不同的時區。我決定我想以GMT格式存儲所有時間/日期。

我只是在用戶提交一個日曆條目說對於1/1/2009 10:30 AM然後我需要計算出這個日期時間是格林威治標準時間的存儲。有沒有辦法知道用戶本地時區/時間是什麼,所以我可以將其與服務器時間(GMT)進行比較以進行轉換?

我真的希望這是有道理的。我希望我可以做到這一點,而不必問用戶他們在什麼時區,或強迫用戶輸入格林尼治標準時間的所有日期。

回答

5

在將它發送到服務器之前,將日期時間轉換爲GMT客戶端(在JavaScript中,如果這是一個Web應用程序)。讓服務器只與GMT(我會說UTC)一起工作。同樣的事情顯示日期/時間。發送GMT/UTC到客戶端,讓JS本地化。在我看來,這是唯一完全安全的方式,因爲您可以根據用戶操作系統來確定時間應該是多久。

還有其他的原因,如果你只需要知道客戶的時間是什麼,你可以從中獲得偏移量(可以通過JS等獲取)。但是如果你需要在不同地點的歷史和未來日期/時間準確的日期/時間,最好讓客戶處理它。

PS:在我的TimeZone實現中,我還使用UNIX時間格式進行客戶端和服務器之間的通信。這很容易解析,我相信它是JS的本地日期時間格式。我現在無法爲你呈現我的代碼,但對於谷歌來說應該相對容易。

1

你唯一的選擇(除了明確的用戶選擇)是獲得的時區從瀏覽器偏移:

var tzOffset = new Date().getTimezoneOffset(); // Minutes 

然後,你需要使用一個隱藏字段或其他合適的方法將其發送到服務器。

這隻會給你一個時區偏移量,而不是一個完整的時區信息。這不是很可靠,所以我仍然將選擇留給用戶,但是使用這些信息來預先選擇合適的時區。