var d = new Date(2020, 12, 122);
return
Sun May 02 2021 00:00:00 GMT+0200 (Central European Summer Time)
但实际上是错误的,因为122天不存在。
如何返回错误的日期格式而不是重新计算的日期?如果无效,甚至可以在 javascript 中获取日期错误?
还有 new Date(2020, 02, 29);
不应该是有效的
答案 0 :(得分:2)
您可以创建一个“安全”构造函数来检查以确保月份和年份保持不变:
function safeConstructDate(year, month, date) {
const d = new Date(year, month, date);
if (d.getMonth() !== month || d.getFullYear() !== year) {
throw new RangeError("Date overflow.");
}
return d;
}
const d = safeConstructDate(2020, 11, 122);
答案 1 :(得分:0)
这是 JS Date 的一个怪癖。它需要天数,并将它们添加到日期中,在您的情况下,需要 122 天,如 2020-12-01 + 121 天 = 2021-05-02
const d = new Date(2020, 12, 122);
console.log("Dec 2020 with 122 days", d)
const valid = new Date(2020, 12, 1);
console.log("Dec 2020 with 1 day", valid)
const addDays = (date, days) => {
date.setDate(date.getDate() + days);
return date;
}
console.log("Dec 2020 with 1 day + 121 days", addDays(valid, 121));