4

我了解 javascript 方法toLocaleDateString()使用了计算机设置。

让我们以W3Schools 为例:当我更改计算机的日期和小时格式时,Firefox 或 IE 中的结果不同(如预期的那样),但 Chrome 仍然显示相同的日期格式,为什么?

4

3 回答 3

2

来自MDN

“确切的格式取决于平台、区域设置和用户设置。”

和,

“你不应该在依赖特定格式或语言环境的环境中使用这种方法。”

基本上,“为什么”是因为 Chrome 就是这样做的。如果您需要特定格式,则必须自己指定。

于 2013-02-12T15:29:31.670 回答
1

来自EMCAScript 5 标准

15.9.5.6 Date.prototype.toLocaleDateString()

此函数返回一个字符串值。String 的内容是依赖于实现的,但旨在以一种方便的、人类可读的形式表示当前时区中 Date 的“日期”部分,该形式与宿主环境的当前语言环境的约定相对应。

Chrome 可以用它喜欢的任何方式将日期表示为区域设置日期字符串。该标准仅提供指南;它没有规定特定的格式。而且,事实上,结果不仅会在浏览器之间有所不同,而且在 Chrome 本身内部也会有所不同,具体取决于您的区域设置。

于 2013-02-12T15:35:07.773 回答
1

看起来 Chrome 不使用 Windows 区域设置,而是使用它自己的设置。这些可通过设置 > 高级设置 > 语言获得。然而,日期格式没有明确定义,它是从语言+国家选择推断出来的,例如:

  • 英语(美国)将日期格式设置为 mm/dd/yyyy
  • 英语(英国)将日期格式设置为 dd/mm/yyyy

(对于任何试图更改这些的人,不要忘记 - 就像我一样 - 重新启动 Chrome 以使设置生效)

toLocaleDateString()回到最初的问题,只要想法是以人类用户理解的格式呈现信息,它似乎是合法的。但这将是一个理想的世界,每个用户都正确配置了他/她的浏览器。相反,Chrome 默认设置为英语(美国),只要人们让它保持为英语,并且需要一些谷歌搜索(大多数用户不会这样做)来更改这些设置。

toLocaleDateString()即使在不“依赖特定格式或语言环境”的情况下,使用它也会有风险。看起来任何跨浏览器 Web 应用程序的唯一“严肃”选项是管理自己的日期格式首选项(当然,每个用户......)

于 2019-05-14T06:37:14.853 回答