Javascript 如何根据用户区域设置设置数字和日期的格式?

Javascript 如何根据用户区域设置设置数字和日期的格式?,javascript,internationalization,locale,Javascript,Internationalization,Locale,我需要一种根据用户的区域设置自动格式化日期和数字对象的方法 到目前为止,我一直在使用toLocaleString()函数来表示日期。对于数字,toLocaleString()也可用,但正如您在我准备的中所看到的,不同浏览器的结果差别很大。在我的Windows计算机上使用英语(美国)语言环境,我得到以下信息: IE9:15000.00 Firefox:15000 铬:15000 在Chrome中,似乎toLocaleString()对数字根本不起作用。除此之外,我还尝试过: 使用Micros

我需要一种根据用户的区域设置自动格式化日期和数字对象的方法

到目前为止,我一直在使用
toLocaleString()
函数来表示日期。对于数字,
toLocaleString()
也可用,但正如您在我准备的中所看到的,不同浏览器的结果差别很大。在我的Windows计算机上使用英语(美国)语言环境,我得到以下信息:

  • IE9:15000.00
  • Firefox:15000
  • 铬:15000
在Chrome中,似乎
toLocaleString()
对数字根本不起作用。除此之外,我还尝试过:

  • 使用MicrosoftAjax.js library
    localeFormat()
    函数,但无论我在电脑上设置了哪种语言环境(通过使用“区域和语言”对话框),日期和数字的格式仍然是US格式
  • 像这样使用库。尽管它们提供了格式化功能,但无法自动检测用户的区域设置
因此,总结一下:如何自动设置数字和日期的格式,以尊重用户的区域设置,从而在所有主要浏览器(如Firefox、Chrome)中都能正常浏览网页

.toLocaleString()
函数在本机Javascript对象上实际上是无用的,因为它不允许您指定区域设置或以其他方式控制它们的行为

在成为现实之前(这在未来可能太遥远,现在根本不值得考虑),您唯一实用的选择是使用Globalize之类的库,但正如您所说,您需要检测用户的首选区域设置


检测区域设置是另一个需要解决的问题。具体地说,
Accept Language
头实际上是无用的,因为绝大多数web用户看不到它。这就是为什么web应用程序通常为用户提供一种自定义机制来选择一个区域设置,该区域设置会传回服务器,服务器随后使用此信息来配置每个响应。

今天,提到的国际化API@Jon得到了广泛支持。
从原始数字中,您可以使用
number(123456).toLocaleString()
,Chrome现在会按预期返回
“123456”
(对于美国地区)。我还没有在IE11/Edge上进行测试,但根据caniuse的说法,它提供了支持。

在服务器端,您可以从浏览器发送的语言环境中检测语言环境。使用它,服务器可以根据语言环境发送javascript。编辑:您似乎也可以从导航器中获得它。语言,我不知道如果某个库不能使用它,它是如何得到支持的。使用
接受语言
是错误的,完全没有用。例如,我的系统设置为使用英语(因为翻译后的操作系统是不可用的操作系统),但我使用挪威或ISO日期格式(因为英国和美国的日期格式不实用,我不在英国或美国)。我认为这不是一个边缘案例,而是代表了世界各地广泛的用户。谢谢你详尽的回答。我可能只会让用户选择他喜欢的区域设置,不会尝试任何花哨的东西。对不起,这仍然是坏的,IMO。我将系统设置为en US,但日期格式为yyyy-MM-dd,但toLocaleDateString()仍会输出MM/dd/yyyyyyystill Breaked in 2019(在Firefox和Windows上的Chrome中)@Rahly IMO它只考虑区域设置,所以它言行一致。您在系统上覆盖了特定的语言环境设置,这一事实不应该包含在这个API中。@Greg这就是语言环境的要点。定义为:“在计算中,区域设置是一组参数,定义用户的语言、区域和用户希望在其用户界面中看到的任何特殊变量首选项。”应考虑系统覆盖。@Rahly我应该说:这取决于区域设置支持的粒度。