HTMLInputElement: thuộc tính valueAsDate

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since November 2017.

Thuộc tính valueAsDate của giao diện HTMLInputElement đại diện cho giá trị hiện tại của phần tử <input> dưới dạng Date, hoặc null nếu chuyển đổi không khả thi.

Thuộc tính này cũng có thể được đặt trực tiếp, ví dụ: để đặt ngày mặc định dựa trên một điều kiện nào đó. Nếu giá trị được cung cấp không phải là null hoặc đối tượng Date, một TypeError sẽ được ném ra. Nếu giá trị được cung cấp là null hoặc ngày không hợp lệ, giá trị đầu vào được đặt thành chuỗi rỗng.

Thuộc tính này luôn trả về null khi truy cập trên đầu vào không dựa trên ngày hoặc thời gian. Khi đặt thuộc tính này trên đầu vào như vậy, ngoại lệ InvalidStateError DOMException sẽ được ném ra.

Giá trị

Một đối tượng Date hoặc null nếu không thể chuyển đổi. Ngày được trả về nên luôn được hiểu là thời gian UTC—ví dụ: sử dụng các phương thức như getUTCDate() thay vì getDate(). Nếu bạn không cẩn thận, kết quả có thể sai 1 ngày—ví dụ: nếu người dùng sống ở múi giờ UTC âm (ví dụ: Mỹ), thì việc hiểu ngày là ngày cục bộ sẽ dẫn đến ngày trước ngày người dùng chọn.

Các loại đầu vào month, date, và week trả về ngày UTC đại diện cho thời điểm đầu tiên của khoảng thời gian được nhập—nghĩa là, chúng luôn là nửa đêm theo UTC. Đối với month, ngày là ngày đầu tiên của tháng. Đối với week, ngày là Thứ Hai của tuần. Loại đầu vào time luôn có ngày đặt thành 1970-01-01.

Loại đầu vào datetime-local không hỗ trợ thuộc tính valueAsDate, vì nó đại diện cho ngày và giờ theo múi giờ địa phương (a wall clock time), nhưng đối tượng Date đại diện cho một điểm thời gian tuyệt đối. Tuy nhiên, một số trình duyệt có thể cung cấp triển khai không chuẩn. WHATWG đang làm việc để tích hợp API Temporal với các đầu vào ngày/giờ để giải quyết trường hợp sử dụng này.

Ví dụ

Lấy giá trị ngày

Ví dụ này minh họa việc truy cập thuộc tính valueAsDate trên <input> loại week.

HTML

Chúng ta bao gồm một <input> loại week:

html
<label for="date">Chọn ngày và giờ:</label>

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

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

JavaScript

Khi không có ngày hoặc giờ được chọn, đầu vào trống giải quyết thành null. Mỗi khi một lựa chọn được thực hiện, sự kiện change được kích hoạt, cập nhật nội dung <pre> hiển thị HTMLInputElement.value của điều khiển biểu mẫu so với giá trị đó dưới dạng ngày.

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

logElement.innerText = `Giá trị ban đầu: ${inputElement.valueAsDate}`;

inputElement.addEventListener("change", () => {
  logElement.innerText = `${inputElement.value} giải quyết thành ${inputElement.valueAsDate}`;
});

Kết quả

Sử dụng các phương thức Date

Ví dụ này minh họa việc áp dụng trực tiếp các phương thức Date cho thuộc tính valueAsDate của <input> loại date.

HTML

Chúng ta bao gồm một <input> loại date:

html
<label for="date2">Chọn một ngày:</label>

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

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

JavaScript

Khi không có ngày nào được chọn, chuỗi rỗng giải quyết thành null. Mỗi khi một lựa chọn được thực hiện, sự kiện change được kích hoạt. Sau đó chúng ta điền nhật ký với ngày đã chọn, được định dạng bằng phương thức toLocaleDateString() của đối tượng Date.

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

logElement.innerText = `Giá trị ban đầu: ${inputElement.valueAsDate}`;

inputElement.addEventListener("change", () => {
  if (inputElement.valueAsDate !== null) {
    logElement.innerText = `Bạn đã chọn ${inputElement.valueAsDate.toLocaleDateString("en-US", options)}`;
  } else {
    logElement.innerText = `${inputElement.value} giải quyết thành ${inputElement.valueAsDate}`;
  }
});

Kết quả

Ngày có thể sai một ngày do múi giờ địa phương của bạn.

Đặc tả kỹ thuật

Specification
HTML
# dom-input-valueasdate-dev

Tương thích trình duyệt

Xem thêm