18910140161

html-为什么Chrome和Firefox在en-GB区域设置中对<input type=“date”>使用mm/dd/yyyy格式?-堆栈溢出

顺晟科技

2022-10-19 12:31:16

202

我一直在尝试在我的一个应用程序中本地化日期和时间,并偶然发现了一些意想不到的(至少对我来说)控件行为。当语言设置为en-GB时,Chrome和Firefox都以mm/dd/yyyy格式显示和接受输入。相反,intl.datetimeformat.format的默认格式是dd/mm/yyyy.

以下是我的测试代码:

<html>
<body>

<p>navigator.language: <span id="nl"></span></p>
<p>navigator.languages: <span id="nls"></span></p>
<p>JSON.stringify(Intl.DateTimeFormat().resolvedOptions(), undefined, 2): <br/>
    <pre id=dtf></pre>
</p>
<p>Intl.DateTimeFormat().format(new Date(2000,2,15)): <span id="dtf_example"></span></p>

<form>
    <label for="date-input">Date widget:</label>
    <input type="date" name="date-input" />
<form>
</body>


<script>
    document.getElementById("nl").textContent = navigator.language;
    document.getElementById("nls").textContent = navigator.languages.toString();
    document.getElementById("dtf").textContent = JSON.stringify(Intl.DateTimeFormat().resolvedOptions(), undefined, 2);
    document.getElementById("dtf_example").textContent = Intl.DateTimeFormat().format(new Date(2000,2,15)); 
</script>

</html>

以下是在Chrome上使用EN-、fr-FR和EN-GB的结果:

在Firefox上的行为是相同的。有人知道为什么他们使用mm/dd/yyyy作为en-gb吗?

如果您想知道我为什么关心:

  1. 我需要对控件之外的站点上的日期进行格式化,并且一直使用intl.datetimeformat().format函数进行格式化。我担心不同的输入和输出格式会使用户感到困惑。
  2. 我是国际化/本地化的新手,我想通过弄清楚发生了什么可能会学到一些东西。

顺晟科技:

我想这是小部件的时区问题。时区是北美。加拿大人,作为前英国殖民地,可能会使用en-GB,但会期待MM/DD/YYYY。因此,语言时区相比。(我有一些经验,但有点猜测。)

我发现了另外两个可以或应该影响控件行为的设置。一个是控件的语言(通常由html标记中的顶级语言定义继承)。这就是WHATG推荐的。据我所知,Chrome和Firefox自然忽略了这一点。

另一种是OS日期/时间格式。Chrome和Firefox都在一定程度上使用了这一点,但确切的算法似乎相当复杂。例如,Chrome将使用en-GB的OS日期/时间格式设置,如果en-GB被设置为Chrome UI和web站点内容的首选语言,则会忽略en-GB的OS日期/时间格式设置,但如果这两个设置为fr-fr。

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航