日期输入和使用不同语言环境的toLocaleDateString

时间:2016-03-18 16:48:51

标签: javascript date

我居住在加拿大,我们在那里格式化日期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(当天的变化是由于格林尼治标准时间到美国东部时间的变化)

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

MSDN描述了这个函数:

  

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

     

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

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

日期输入和toLocaleDateString之间的不同格式对我来说是非常困惑的,有关如何对齐这两者的任何想法?

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

2 个答案:

答案 0 :(得分:0)

将您的语言环境作为句点传递给toLocaleDateString()
e.g:

date.toLocaleDateString('en-CA')

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

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

检查here

答案 1 :(得分:0)

  

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,所以如果您打算使用它,您必须检查支持(相当简单),如果缺少,请提供后备做一些明智的事情。一旦你有一个好的后备,你可以在任何地方实现它并忘记输入类型日期。

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