2010-02-20 19 views
12

我想了解在各种浏览器中运行的JavaScript如何确定当使用方法toLocaleString()时,JavaScript Date对象将使用的语言环境。JavaScript“Date”对象如何确定用户浏览器的区域设置?

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

在Windows上有注册表设置,你必须手动设置?我错过了某个地方的某些设置吗?或者我必须为特定区域获取Windows安装光盘?

+0

您是在询问有关时区的信息,或者您询问将日期转换为字符串时使用的格式(例如,是使用英文月份名称还是用户自己的语言)? – MarkJ 2010-02-20 10:55:32

+1

这是专门的名称,但通常它也指日期格式。时间格式在不同的语言环境中有所不同? – 2010-02-20 15:45:54

回答

7

从我最喜欢的博客之一上的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类似。

2

它是从系统时钟设置的时区,而不是区域设置。

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

您可能必须重新启动操作系统才能使语言环境更改生效。

+1

这个顺序对我来说很重要,但也是所用的语言,例如将系统改为法语系统不会影响我的JavaScript'日期'对象。 – 2010-02-20 15:48:33

1

虽然浏览器实现通常取决于操作系统例程来进行格式化,但我不认为规范中有任何内容来确定格式如何发生或输出是什么,只是它适用于语言环境。

我认为问题是关于如何确定区域设置。至少Firefox根据安装将其视为固定值。它无法通过操作系统,甚至浏览器偏好

实际控制任意语言环境中的日期格式,除了你的浏览器呈现给(你在Firefox中看到只涉及在HTTP交易中使用不同的区域设置的语言/区域偏好)改变是安装的区域设置,你需要一个JS库,如jsdate或dojo.date。

+0

通过研究我可以证实,只有资源管理器似乎受到语言环境设置的影响,它似乎我需要一个实际的区域特定的安装。 Firefox似乎是正确的,到目前为止,我认为webkit是相似的。 – 2010-02-26 09:18:14

+2

除了跨浏览器问题之外,还有其他很好的理由不依赖于本机浏览器格式:机器可能是共享的,或者用户可能无法更改操作系统设置,实际格式未指定并且可能不一致通过网页浏览器,你不能很好地控制格式化模式 – peller 2010-03-14 15:38:26

相关问题