我一直在嘗試在輸入框中顯示日期時間,并且根據下面的代碼片段,人們會認為文本輸入和日期時間本地輸入會顯示相同的時間。但遺憾的是,他們沒有。
誰能告訴我為什么,以及如何讓它按照“應該”的方式行事?
它在我測驗過的幾臺計算機上的表現如何。
沒有按預期顯示時間">
const datetime = document.getElementById('datetime');
const expected = document.getElementById('expected');
const date = new Date();
date.setMilliseconds(0)
datetime.valueAsNumber = date;
expected.value = date.toLocaleString();
<h1> Datetime-local bug: </h1>
<input type="datetime-local" id="datetime" />
<input type="text" id="expected" />
uj5u.com熱心網友回復:
瀏覽器如何呈現和決議input type="datetime-local". 一般來說,最好對日期和時間使用單獨的控制元件,并根據需要在后臺將它們組合起來(可能與時區資訊一起用于準確的 DST 跟蹤)。
但是,對于這個問題,valueAsNumber根據規范,該屬性是只讀的。一些瀏覽器以不同的方式實作了這一點,因為它們具有valueAsDate應該是可寫的屬性。
在 Windows 10 上的 Edge 版本 95.0.1020.53(官方版本)(64 位)中運行以下代碼段,它可能會引發關于輸入不支持日期值的錯誤。
const datetime = document.getElementById('datetime');
const expected = document.getElementById('expected');
const date = new Date();
date.setMilliseconds(0)
datetime.valueAsDate = date;
expected.value = date.toLocaleString();
<h1> Datetime-local bug: </h1>
<input type="datetime-local" id="datetime" />
<input type="text" id="expected" />
因此,我建議將該value屬性設定為縮寫的 ISO 8601 格式(沒有幾分之一秒,也沒有時區)。
const datetime = document.getElementById('datetime');
const expected = document.getElementById('expected');
const date = new Date();
date.setMilliseconds(0)
datetime.value = date.toISOString().slice(0, 19);
console.log(datetime.value);
expected.value = date.toLocaleString();
<h1> Datetime-local bug: </h1>
<input type="datetime-local" id="datetime" />
<input type="text" id="expected" />
請注意,格式不一定相同。這是因為input type="datetime-local"使用了作業系統的自定義區域設定,而Date.prototype.toLocaleString沒有使用這些設定。例如,我更喜歡使用 yyyy-MM-dd HH:mm:ss 格式(例如,2021-11-16 17:46:33)作為日期和時間,但我的語言(有些人決定稱之為“語言環境”) ) 設定為“en-US”,這意味著toLocaleString要格式化為 MM/dd/yyyy h:mm:ss aa 格式(例如,11/16/2021 12:46:33 PM)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/357761.html
標籤:javascript html 约会时间
上一篇:在Ajax回應之后使用then
