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

浏览器兼容性

另见