HTMLInputElement: valueAsDate 屬性

Baseline 已廣泛支援

此功能已成熟,並可在多種裝置和瀏覽器版本中正常工作。自 ⁨2017 年 11 月⁩ 以來,所有瀏覽器均已支援此功能。

HTMLInputElement 介面的 valueAsDate 屬性表示 <input> 元素的當前值,形式為 Date 物件,如果無法轉換則為 null

此屬性也可以直接設定,例如基於某些條件設定預設日期。如果提供的值既不是 null 也不是 Date 物件,則會丟擲 TypeError。如果提供的值是 null無效日期,則輸入值為設定為空字串。

當在非日期或時間輸入上訪問此屬性時,它始終返回 null。當在此類輸入上設定此屬性時,會丟擲 InvalidStateError DOMException

一個 Date 物件,如果無法轉換則為 null。返回的日期應始終解釋為 UTC 時間——例如,使用 getUTCDate() 等方法而不是 getDate()。如果不小心,結果可能會相差 1 天——例如,如果使用者居住在 UTC 偏移量為負數(例如美國)的地區,則將日期解釋為本地日期將導致比使用者選擇的日期早一天。

monthdateweek 輸入型別返回一個 UTC 日期,該日期表示輸入時間段的第一個瞬間——即,它們始終是 UTC 午夜。對於 month,日期是該月份的第一天。對於 week,日期是該周的星期一。time 輸入型別始終將日期設定為 1970-01-01

datetime-local 輸入型別不支援 valueAsDate 屬性,因為它表示本地時區中的日期和時間(牆上時鐘時間),而 Date 物件表示絕對時間點。但是,某些瀏覽器可能提供非標準實現。WHATWG 正在努力將 Temporal API 與日期/時間輸入整合,以處理這種情況。

示例

檢索日期值

此示例演示瞭如何訪問型別為 week<input> 元素的 valueAsDate 屬性。

HTML

我們包含了一個型別為 week<input> 元素

html
<label for="date">Pick a date and time:</label>

<input name="date" id="date" type="week" />

<pre id="log"></pre>

JavaScript

當未選擇日期或時間時,空輸入解析為 null。每次做出選擇時,都會觸發一個 change 事件,更新顯示錶單控制元件的 HTMLInputElement.value 與其作為日期值進行比較的 <pre> 內容。

js
const logElement = document.getElementById("log");
const inputElement = document.getElementById("date");

logElement.innerText = `Initial value: ${inputElement.valueAsDate}`;

inputElement.addEventListener("change", () => {
  logElement.innerText = `${inputElement.value} resolves to ${inputElement.valueAsDate}`;
});

結果

使用 Date 方法

此示例演示瞭如何將 Date 方法直接應用於型別為 date<input> 元素的 valueAsDate 屬性。

HTML

我們包含了一個型別為 date<input> 元素

html
<label for="date2">Pick a date:</label>

<input name="date2" id="date2" type="date" />

<pre id="log"></pre>

JavaScript

當未選擇日期時,空字串解析為 null。每次做出選擇時,都會觸發一個 change 事件。然後,我們使用 Date 物件的 toLocaleDateString() 方法格式化所選日期,並將其填充到日誌中。

js
const logElement = document.getElementById("log");
const inputElement = document.getElementById("date2");
const options = {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
};

logElement.innerText = `Initial value: ${inputElement.valueAsDate}`;

inputElement.addEventListener("change", () => {
  if (inputElement.valueAsDate !== null) {
    logElement.innerText = `You selected ${inputElement.valueAsDate.toLocaleDateString("en-US", options)}`;
  } else {
    logElement.innerText = `${inputElement.value} resolves to ${inputElement.valueAsDate}`;
  }
});

結果

由於您所在的本地時區,日期可能相差一天。

規範

規範
HTML
# dom-input-valueasdate-dev

瀏覽器相容性

另見