使用本地日期设置和获取 HTMLInputElement.valueAsDate 的正确方法是什么?

Hel*_*rld 7 html javascript

valueAsDate 的功能似乎存在根本性的缺陷:

var date1 = new Date();
date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()); // input expects requires year, month, day

var input = document.createElement("input"); input.type = "date";

input.valueAsDate = date1;

var date2 = input.valueAsDate;

console.log(date1);
console.log(date2);

console.log(date1.getTime(), date2.getTime()); // EVEN THE UTC TIMESTAMP IS NOT EQUAL!!
Run Code Online (Sandbox Code Playgroud)

我想设置一个本地日期,我想获取一个本地日期。如何在来回保持正确的日期类型(UTC 或本地)的同时实现这一目标?

Ber*_*rgi 11

上显示的日期<input type="date">是 UTC 日期。如果您想将它们视为当地时间,则需要调整对象Date

var date1 = new Date(); // now
var input = document.createElement("input"); input.type = "date";

input.valueAsDate = new Date(Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()));

var midnightUtcDate = input.valueAsDate;
var date2 = new Date(midnightUtcDate.getUTCFullYear(), midnightUtcDate.getUTCMonth(), midnightUtcDate.getUTCDate());

console.log(date1, date1.toLocaleDateString());
console.log(date2, date2.toLocaleDateString());
Run Code Online (Sandbox Code Playgroud)