JavaScript的“Date”对象如何确定用户浏览器的语言环境?

17

我想了解不同浏览器中运行的JavaScript如何确定在使用方法toLocaleString()时将使用哪个本地区域设置。

我通过Windows控制面板更改了语言和本地区域设置,也将每个浏览器的语言设置更改为相同。但功能仍返回英文日期。

是否有Windows注册表设置需要手动设置?我错过了某些设置吗?还是我必须获取特定区域的Windows安装盘?


你是在询问时区还是在询问将日期转换为字符串时使用的格式(例如,它是否使用英语月份名称或用户自己的语言)? - MarkJ
1
它特指名称,但通常也涉及日期格式。不同地区的时间格式是否不同? - Matt Smith
3个回答

10

这是我最喜欢的博客之一,关于JScript行为的一篇很棒的文章:

我认为在IE中现在处于“总是默认使用美式英语”的模式。这很令人困惑,因为脚本引擎有能力独立于用于格式化日期、数字等的区域设置更改用于错误消息的区域设置。

以及

Date.prototype.toLocaleDateStringtoLocaleTimeStringtoLocaleString受Win32 NLS API中一些奇怪的问题所困扰。为了解决各种问题,只对1600年至10000年之间的日期进行本地化。希伯来语日期格式对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的行为类似。


3

1
我对顺序很感兴趣,但也关注所使用的语言。例如,将系统更改为法语语言系统并不会影响我的JavaScript“日期”对象。 - Matt Smith
这个语句是不正确的 - “_使用操作系统区域设置_”。 如今,“使用的区域设置和返回的字符串形式完全取决于实现”-Mozilla已经在文档中进行了更新。 - Alex Klaus

1

虽然浏览器实现通常依赖于操作系统例程来进行格式化,但我认为规范中没有任何内容确定格式化发生的方式或输出是什么,只要它适用于区域设置。

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

要实际控制除浏览器假定的已安装区域设置之外的任意区域设置的日期格式,您需要像 jsdate 或 dojo.date 这样的 JS 库。


通过研究我可以确认,只有Explorer似乎受到区域设置的影响,而且看起来我需要一个真正特定于地区的安装。Firefox看起来你是正确的,到目前为止我认为WebKit也是类似的。 - Matt Smith
2
除了跨浏览器问题之外,不依赖于本机浏览器格式的其他好理由包括:机器可能是共享的,用户可能无法更改操作系统设置,实际格式未指定并且在Web浏览器中可能不一致,您对格式化模式没有太多控制。 - peller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接