2012-06-26 75 views
4

我需要一種方法根據我的用戶的區域設置自動格式化日期和數字對象。如何根據用戶區域設置設置數字和日期的格式?

到目前爲止,我一直在使用toLocaleString()函數進行日期。對於數字,toLocaleString()也是可用的,但正如您在我準備的jsFiddle中看到的,瀏覽器之間的結果差異很大。隨着我的Windows機器上的英語(美國)語言環境,我得到這個:

  • IE9:15,000.00
  • 火狐:15,000
  • 鉻:15000

在Chrome中,它看起來像toLocaleString()根本不適用於數字。除了這種方法,我也試過:

  • 要使用MicrosoftAjax.js庫localeFormat()功能,但(通過使用「區域和語言選項」對話框中)無論在哪種語言環境,我在我的電腦設置,日期和數字仍然以美國格式格式化。
  • 使用庫如Globalize。儘管它們提供格式化功能,但它們無法自動檢測用戶的區域設置。

因此,總結一下:如何自動格式化數字和日期以尊重所有主流瀏覽器(IE,Firefox,Chrome)都能正常瀏覽網頁的用戶區域設置?

+0

在服務器端,您可以從瀏覽器發送的['Accept-Language'頭文件](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)中檢測區域設置。使用你的服務器可以根據語言環境發送JavaScript。編輯:看來你也可以從'navigator.language'中得到它,我不知道如何支持,雖然如果一些庫不能使用它。 – Esailija

回答

8

.toLocaleString()本地Javascript對象上的函數實際上是無用的,因爲它不允許您指定區域設置或以其他方式控制其行爲。

直到the ECMAScript i18n API成爲現實(這可能太過於將來值得考慮的現在)您唯一可行的選擇是使用像Globalize這樣的庫,但如您所說,您需要檢測用戶的首選語言環境。

檢測語言環境是另一個問題,即not easily solved with pure Javascript。具體來說,Accept-Language標題是恕我直言,實際上沒有什麼用作區域檢測的手段,因爲它對絕大多數網頁用戶不可見。這就是爲什麼Web應用程序通常會爲用戶提供一種自定義機制來選擇傳回服務器的區域設置,並且服務器使用此信息來配置其後的每個響應。

+0

感謝您的詳盡答覆。我可能會讓用戶選擇他喜歡的區域設置,而不會嘗試任何花哨的東西。 –

0

今天國際化API @Jon提到了廣泛的支持。 根據原始數字,您可以使用Number(123456).toLocaleString(),並且Chrome按照預期返回"123,456"(對於美國語言環境)。我沒有在IE11/Edge上測試過,但根據caniuse支持。

+0

對不起,但這仍然是打破,國際海事組織。我將系統設置爲en-US,但日期格式爲yyyy-MM-dd,但toLocaleDateString()仍然輸出MM/dd/YYYY – Rahly

相關問題