2011-04-14 57 views
5

我正在尋找有關在用戶當前時區以外的時區顯示Web應用程序中的時間的建議。Web應用程序中的時區敏感日期和時間顯示?

我們將UTC/GMT的日期/時間存儲在數據庫中,所以格式化UTC/GMT或用戶當前時區的時間不是問題。但是,在其他情況下,我們需要從任意時區的角度顯示時間(即,本頁面上的每個日期/時間都是東部的,無論用戶是否在西海岸,中部,東部,等等。)。

過去我們已經存儲了偏移量或時區信息,然後在.Net的服務器代碼中完成了計算,否則我們在JavaScript中做了一些客戶端操作,我寧願避免,因爲它變得非常依賴於javascript和用戶的瀏覽器。我想知道在更多客戶端/ MVC類型應用程序中執行此操作的最佳方法。

下面是一個例子:存儲在分貝

  1. 日期:1302790667(星期四,2011年4月14日十四時17分47秒GMT)在中部時區中的客戶端顯示
  2. 轉換日期:星期四四月14 9點17分47秒2011
  3. 日期其實我是想在東部時區顯示,總:週四4月14日十時17分47秒2011

在上面的例子中,可以很容易地獲得時間UTC(#1)或用戶當前時區(#2)但是獲得#3比較困難。我的選擇似乎是:在數據庫

  1. 商店偏移或時區,並在客戶端上執行計算 - 這就是我們在與.net過去所做的那樣,但它似乎在客戶端代碼,甚至是混亂我們目前正試圖避免的路徑。
  2. 在服務器上進行轉換併發送完整日期以顯示給客戶端 - 客戶端收到一個字符串(「Thu Apr 14 10:17:47 2011」)。這有效,但它不是很靈活。
  3. 在服務器上進行轉換,將其分解成幾部分並將它們發送給客戶端,然後將它們放回到一起。 (「{DayOfWeek:Thu,Month:Apr,Day:14,Hour:10,Minute:17}」)。這給了我們正確的數據,並給了我們在日期格式化方面的更多靈活性,但是對於這種情況感覺有點不對。

任何其他選項的想法?其他人如何處理類似的情況?謝謝。

+0

你最終使用了什麼?我即將試用[此](https://github.com/csnover/js-iso8601),我有相同的客戶要求,我正在爭分奪秒! – blong 2011-09-29 13:20:30

+1

我們最終完成了服務器上的所有計算。我會添加一個答案。 – 2011-09-29 17:51:00

回答

0

我建議您查看Datejs庫。它爲基本的JavaScript日期操作提供了一系列擴展,包括「setTimezone()」方法以及將日期轉換爲格式化字符串以供顯示的靈活方法。

我通常不會建議圖書館,當他們的使用沒有明確允許的問題,但Datejs不是很大,它非常穩固(即使它被稱爲「alpha」版本)。如果你不想依賴這樣的東西,你可能想要看看它,只是爲了看看它的擴展如何實現的基礎知識。

1

我們的研究結果:

  1. 我嘗試了像Datejs,MS阿賈克斯等幾個庫,我一直都不是很滿意。Datejs在我的一些測試用例中根本不起作用,沒有被主動維護,並且似乎非常關注我們不需要的語法糖(date.today()。first()。thursday(),等等)
  2. 我們使用jQuery進行一些基本的日期/時間解析。
  3. 我遇到很多「自己動手」的客戶端日期轉換「黑客」,其中大多數只處理轉換爲UTC,開始工作正常,然後最終在一些邊緣情況下崩潰。 This one是大量標準UTC轉換的90%解決方案,但並未解決我們的「任意時區」問題。

在代碼複雜度增加的轉換例程和他們似乎導致的錯誤之間,我們決定避免大部分時間處理客戶端數據。我們使用現有的日期處理例程在服務器上進行日期轉換,並將格式化的日期或信息作爲屬性傳遞給視圖。如果我們需要一個單獨的日期,我們只需添加另一個屬性。通常,我們一次只需要一些屬性(即EventDateUTC,EventDateLocal,EventDateAlwaysAustralia和EventDayOfWeek)。

相關問題