我一直在嘗試在我的一個應用程式中對日期和時間進行本地化,并偶然發現了一些意想不到的(至少對我來說)控制元件行為。當語言設定為 en-GB 時,Chrome 和 Firefox 都顯示并接受 mm/dd/yyyy 格式的輸入。相反,Intl.DateTimeFormat.format的默認格式是dd/mm/yyyy.
。以下是我的測驗代碼:
<html>
<body>
<p>navigator.language: <span id="nl"/span>> </span></p>
<p>navigator.languages: <span id="nls"> </span></p>
<p>JSON.stringify(Intl.DateTimeFormat().resolvedOptions(), undefined, 2) 。<br/>JSON.stringify(Intl.DateTimeFormat(.resolvedOptions()): undefined, 2)
<pre id=dtf> </pre>>
</p>
<p>Intl.DateTimeFormat().format(new Date(2000,2,15) )。<span id="dtf_example"/span>> </span></p>
<form>
<label for="date-input">Date widget。 </label>日期部件:</label>
< input type="date" name="date-input" />
<form>
</body>
<script>
document.getElementById("nl"/span>).textContent = navigator.language;
document.getElementById("nls"/span>)。 textContent = navigator.languages.toString()。
document.getElementById("dtf"/span>)。 textContent = JSON。 stringify(Intl.DateTimeFormat)。 resolvedOptions(), undefined, 2) 。
document.getElementById("dtf_example"/span>)。 textContent = Intl. DateTimeFormat()。 format(new Date(2000, 2,15))。)
</script>>
</html>/span>
下面是在Chrome瀏覽器上使用en-US、fr-FR和en-GB的結果:
這種行為在Firefox上也是一樣的。有誰知道為什么他們用mm/dd/yyyy來表示en-GB?
如果你想知道我為什么關心:
- 我需要在控制元件之外的網站上格式化日期,并且一直在使用Intl.DateTimeFormat().format函式來這樣做。我擔心不同的輸入和輸出格式會使用戶感到困惑。
- 我是國際化/本地化的新手,我想通過弄清楚發生了什么,我可能會學到一些東西。
uj5u.com熱心網友回復:
我猜這是小部件的時區問題。時區是指北美洲。例如,加拿大人可能會使用en-GB,因為他們是前英國殖民地,但會期望使用mm/dd/yyyy。所以,語言與時區。
uj5u.com熱心網友回復:
我又發現了兩個可以或應該影響控制元件行為的設定。一個是控制元件的語言(通常由html標簽中的頂級語言定義繼承)。這就是WHATG推薦的。據我所知,Chrome 和 Firefox 自然會忽略這一點。
。另一個是作業系統的日期/時間格式。Chrome 和 Firefox 都在一定程度上使用了這種格式,但具體的演算法似乎相當復雜。例如,如果 en-US 被設定為 Chrome UI 和網站內容的首選語言,Chrome 將使用 en-GB 的作業系統日期/時間格式設定,但如果這兩種語言被設定為 fr-FR,則會忽略它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321628.html
標籤:



