如何根据用户区域设置数字和日期的格式
How to format numbers and dates based on user locale settings?
我需要一种方法来根据用户的区域设置自动格式化日期和数字对象。
到目前为止,我一直在使用toLocaleString()
日期函数。对于数字,也可以使用toLocaleString()
,但正如您在我准备的 jsFiddle 中看到的那样,浏览器之间的结果差异很大。在我的 Windows 机器上使用英语(美国)语言环境,我得到这个:
- IE9:15,000.00
- 火狐浏览器:15,000
- 铬:15000
在 Chrome 中,似乎toLocaleString()
对数字根本不起作用。除了这种方法,我还尝试过:
- 要使用 MicrosoftAjax.js库
localeFormat()
函数,但无论我在 PC 上设置了哪个区域设置(通过使用"区域和语言"对话框),日期和数字仍然都以美国格式格式化。 - 使用像全球化这样的库。尽管它们确实提供了格式设置功能,但它们无法自动检测用户的区域设置。
因此,总结一下:如何自动格式化数字和日期以尊重以适用于所有主要浏览器(IE,Firefox,Chrome)的方式浏览网页的用户的区域设置?
Javascript对象上的.toLocaleString()
函数实际上是无用的,因为它不允许你指定语言环境或以其他方式控制它们的行为。
在 ECMAScript i18n API 成为现实之前(这可能太遥远了,现在根本不值得考虑),你唯一可行的选择是使用 Globalize 等库,但正如你所说,你需要检测用户的首选语言环境。
检测语言环境是另一个用纯Javascript不容易解决的问题。具体来说,恕我直言,Accept-Language
标头作为区域设置检测的手段实际上是无用的,因为它对绝大多数 Web 用户不可见。这就是为什么 Web 应用程序通常为用户提供一种自定义机制来选择将通信回服务器的区域设置,并且服务器使用此信息来配置此后的每个响应。
今天,@Jon提到的国际化API得到了广泛的支持。您可以使用Number(123456).toLocaleString()
的基元数字,Chrome 现在会按预期返回"123,456"
(对于美国语言环境)。我还没有在IE11/Edge上进行测试,但根据caniuse的支持。
- 带有非数字/非日期x轴的Dygraph
- 将日期字符串转换为数字以进行比较
- 如何使文本、数字和日期html输入字段以一致的方式支持Ctrl+Z(撤消)
- 如何将返回一串数字的 JSON 属性转换为日期
- javascript/jquery 数字时钟脚本,24 小时格式,带有日期
- jQuery 验证输入文本是否仅接受数字、单词或日期
- 数字、日期和日期的国际化(i18n);货币(JavaScript)
- 为什么 MVC4 验证 js 自动将数字验证添加到日期时间
- 用javascript将日期转换为数字(而不是时间戳)
- 这个javascript日期解析有什么问题?为什么 js 讨厌数字 8
- 如何根据用户区域设置数字和日期的格式
- Javascript:将日期作为数字进行比较
- ng-重复带有数字和日期的多个过滤器
- Dijit DateTextBox - 以 ISO/数字格式设置日期
- 为什么一串数字的工作方式与新日期中的实际数字不同
- 将数字日期转换为文本日期的效率
- 按日期对包含数字(日期)的文本行排序
- 没有时间的过去数字日期
- javascript中的长数字日期格式
- 与Javascript对象交互,其中键为数字日期/时间