2012-06-26 73 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

相关问题