我想了解不同浏览器中运行的JavaScript如何确定在使用方法toLocaleString()
时将使用哪个本地区域设置。
我通过Windows控制面板更改了语言和本地区域设置,也将每个浏览器的语言设置更改为相同。但功能仍返回英文日期。
是否有Windows注册表设置需要手动设置?我错过了某些设置吗?还是我必须获取特定区域的Windows安装盘?
我想了解不同浏览器中运行的JavaScript如何确定在使用方法toLocaleString()
时将使用哪个本地区域设置。
我通过Windows控制面板更改了语言和本地区域设置,也将每个浏览器的语言设置更改为相同。但功能仍返回英文日期。
是否有Windows注册表设置需要手动设置?我错过了某些设置吗?还是我必须获取特定区域的Windows安装盘?
这是我最喜欢的博客之一,关于JScript行为的一篇很棒的文章:
我认为在IE中现在处于“总是默认使用美式英语”的模式。这很令人困惑,因为脚本引擎有能力独立于用于格式化日期、数字等的区域设置更改用于错误消息的区域设置。
以及
Date.prototype.toLocaleDateString、toLocaleTimeString和toLocaleString受Win32 NLS API中一些奇怪的问题所困扰。为了解决各种问题,只对1600年至10000年之间的日期进行本地化。希伯来语日期格式对2240年后的年份也不支持。通过跨越这些障碍后,使用Win32 API GetDateFormat和GetTimeFormat来格式化字符串。(我模糊地记得还涉及到泰国日历的一个错误,但我不记得详细信息了。)
来自MDC(Mozilla Developer Center):
toLocaleString 方法依赖于底层操作系统来格式化日期。它使用脚本运行的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期之前(04/15/98),而在德国,日期出现在月份之前(15.04.98)。如果操作系统不符合2000年问题,并且对于1900年以前或2000年以后的年份没有使用完整的年份,则toLocaleString返回的字符串不符合2000年问题。当转换操作系统无法正确格式化的年份时,toLocaleString与toString的行为类似。
虽然浏览器实现通常依赖于操作系统例程来进行格式化,但我认为规范中没有任何内容确定格式化发生的方式或输出是什么,只要它适用于区域设置。
我认为问题是关于如何确定区域设置的。至少 Firefox 将其视为取决于安装的固定值。它不能通过操作系统甚至浏览器首选项更改(Firefox 中看到的语言/区域首选项与仅在 HTTP 事务中使用的不同区域设置相关)
要实际控制除浏览器假定的已安装区域设置之外的任意区域设置的日期格式,您需要像 jsdate 或 dojo.date 这样的 JS 库。