【问题标题】:Date input and toLocaleDateString using different locales日期输入和 toLocaleDateString 使用不同的语言环境
【发布时间】:2016-07-05 12:51:27
【问题描述】:

我居住在加拿大,我们的日期格式为 dd/mm/yyyy。当我打电话给toLocaleDateString()时,我看到了一些不寻常的东西

HTML:

<input type="date" value="2016-01-13">
<p id="container">
</p>

JS:

var d = new Date("2016-01-13");
document.getElementById('container').innerText = d.toLocaleDateString();

日期输入的值是我所期望的 - 2016-01-13。

段落的值是美国格式-12-01-2016(日期的变化是由于从GMT本地化到EST)

Chrome 语言设置为加拿大,我的系统设置 (Windows 7) 也是如此。日期输入似乎尊重这一点,但我认为toLocaleDateString() 会选择加拿大作为我的语言环境并适当地格式化日期。

MSDN 是这样描述这个函数的:

dateObj.toLocaleDateString([locales][, options])

语言环境(可选)。包含一个或多个语言或区域设置标记的区域设置字符串数组。如果您包含多个区域设置字符串,请按优先级降序列出它们,以便第一个条目是首选区域设置。如果省略此参数,则使用 JavaScript 运行时的默认语言环境。

用户可以更改 JavaScript 运行时默认语言环境吗?我猜不是因为我没有成功。

日期输入和toLocaleDateString 之间的不同格式让我很困惑,有什么想法可以将两者对齐吗?

http://jsfiddle.net/DfkU5/283/

【问题讨论】:

  • 你不应该期待任何事情,因为toLocaleString完全依赖于实现。此外,OP 的便捷格式不应基于它们所在的位置,而是基于它们想要查看的内容(即偏好不一定取决于语言环境,因此 toLocaleString 有点用词不当)。去英国旅行的美国人会希望他们的所有设备都开始以 d/m/y 格式报告日期吗?还是他们宁愿设置一个偏好以始终查看 m/d/y?

标签: javascript date


【解决方案1】:

用户可以更改 JavaScript 运行时默认语言环境吗?

这完全取决于浏览器开发人员,他们可以为所欲为。然而,他们倾向于使用系统设置,但并非总是如此。 Chrome 会忽略我的 toLocalString 设置,当我偏好 d/m/y 时,会以 m/d/y 格式显示日期。

Safari、Chrome 和 Firefox 都为 toLocaleDate 显示不同的字符串,这使得它几乎毫无用处。

日期输入和 toLocaleDateString 之间的不同格式让我很困惑,有什么想法可以使两者对齐吗?

到目前为止,最好的解决方案是以明确的格式显示日期,最简单的方法是使用月份名称。以下所有内容都是明确且易于阅读的:

19-Mar-2016
March 19, 2016
19 March, 2016

为此,您可以编写自己的格式化程序(可能是 10 行代码),或者使用库。

关于输入类型日期,并非所有浏览器都支持它,并且有lots of issues,所以如果你要使用它,你必须检查支持(相当琐碎),如果缺乏,提供一个后备,做一些事情明智的。一旦你有了一个好的回退,你不妨到处实现它并忘记输入类型日期。

然后所有与之相关的问题都消失了。 ;-)

【讨论】:

    【解决方案2】:

    将您的语言环境作为参数传递给toLocaleDateString()
    例如:

    date.toLocaleDateString('en-CA')
    

    或者如果您想指定一些备用语言,请执行此操作

    date.toLocaleDateString(['en-CA','en-US'])
    

    查看here

    【讨论】:

    • 不幸的是,这正是我不想做的。确定用户的区域设置可能容易出错,我只是想要一些一致性。
    • @MisterEpic 在浏览器控制台中输入 navigator.language 以查看运行时区域设置。它不应该在“en-US”中,否则 javascript 可以正确地以美国格式显示日期。
    • 只有在主机支持Intl 对象并且脚本知道要传递的适当设置时才有效。导航器语言设置不一定对日期格式的偏好有任何影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多