JavaScript“Date”对象如何确定用户浏览器的区域设置?

时间:2010-02-20 10:50:36

标签: javascript localization browser locale

我试图了解在各种浏览器中运行的JavaScript如何确定使用方法Date时JavaScript toLocaleString()对象将使用的区域设置。

我已经通过Windows控制面板更改了系统的语言和区域设置,我还将每个浏览器的语言设置更改为相同。该功能仍然返回英文日期。

您是否需要手动设置Windows上的注册表设置?我错过了某处的设置吗?或者我必须为特定区域获取Windows安装光盘吗?

3 个答案:

答案 0 :(得分:8)

我最喜欢的一篇关于JScript行为的博客的精彩文章:

  

我相信我们现在处于IE中“始终默认为美英”模式。这令人困惑,因为脚本引擎能够更改用于错误消息的语言环境,而不依赖于用于格式化日期,数字等的语言环境。

   Date.prototype.toLocaleDateString toLocaleTimeString toLocaleString 因Win32 NLS API中的一些奇怪怪异而变得复杂。要解决各种问题,只能定位1600到10000 AD之间的日期。公元2240年后的希伯来日期格式也不受支持。一旦我们跳过这些障碍,Win32 API GetDateFormat和GetTimeFormat将用于格式化字符串。 (我隐约回想起那里还有一个涉及泰国日历的错误,但我不记得细节。)

https://blogs.msdn.com/ericlippert/archive/2004/05/18/jscript-localization-and-those-wacky-newfoundlanders.aspx

来自MDC (Mozilla Developer Center)

  

toLocaleString方法依赖于格式化日期的底层操作系统。它使用运行脚本的操作系统的格式约定将日期转换为字符串。例如,在美国,月份出现在日期(04/15/98)之前,而在德国,日期出现在月份之前(15.04.98)。如果操作系统不符合2000年标准,并且在1900年之前或2000年之前未使用全年,则toLocaleString将返回不符合2000年的字符串。转换操作系统未正确格式化的年份时,toLocaleString的行为与toString类似。

答案 1 :(得分:2)

来自系统时钟的时区设置,而不是语言环境。

[编辑]现在我重读了这个问题,你说的是日期格式化不是吗? (2月15日对2月15日)以下是关于Firefox方法的参考:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date/toLocaleString。它说它使用操作系统的语言环境。

您可能需要重新启动操作系统才能使区域设置更改生效。

答案 2 :(得分:1)

虽然浏览器实现通常依赖于OS例程来进行格式化,但我认为规范中没有任何内容可以确定格式化是如何发生的或输出是什么,只是它适用于语言环境。 / p>

我认为问题在于如何确定区域设置。至少Firefox会根据安装情况将其视为固定值。它无法通过操作系统甚至浏览器首选项进行更改(您在Firefox中看到的语言/区域首选项与仅在HTTP事务中使用的不同区域设置相关)

要实际控制任意语言环境中的日期格式,除了浏览器假定为已安装的语言环境之外,您还需要一个JS库,如jsdate或dojo.date。