new Date(2020, 12, 122) 应该抛出错误

时间:2020-12-18 22:09:46

标签: javascript

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); 不应该是有效的

2 个答案:

答案 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));