我正在尝试通过添加特定时间段来基于另一个日期来计算日期。假设我要在日期上加上3个月,那么新日期应该是3个月后的日期的前一天。以该示例为例,以下是我最接近实现我想做的事情的代码:
new Date(
date
.setMonth(date.getMonth() + 3)
.setDate(date.getDate() - 1)
)
但这将返回错误:TypeError:date.setMonth(...)。setDate不是函数。我认为方法链不起作用,因此我可能必须在下一条语句中使用setDate。有没有办法在单个代码语句中做到这一点?
答案 0 :(得分:0)
您可以这样
newDate = new Date(newDate.getFullYear(), newDate.getMonth() + 3, endDate.getDate() -1)
答案 1 :(得分:0)
您可以扩展Date Object并创建自己的可链接方法。
class MyDate extends Date {
constructor() {
super(...arguments)
}
changeMonth(amount) {
return new MyDate(this.setMonth(this.getMonth() + amount));
}
changeDate(amount) {
return new MyDate(this.setDate(this.getDate() + amount));
}
};
const date = new MyDate();
console.log("Original:", date);
console.log("Changed :", date.changeMonth(3).changeDate(-5));
答案 2 :(得分:0)
是否可以在单个语句中为日期对象设置日期和月份?
是的。以下将一个语句中的月份设置为1月,将日期设置为第一个:
let d = new Date();
d.setMonth(0, 1);
…如果我想在日期上添加3个月,则新日期应为3个月后的日期的前一天
不,您不能在一个语句中这样做,因为添加一个月需要考虑该月中的天数。例如。将2020年1月31日的结果增加一个月 2月31日,并且由于2020年2月只有29天,因此日期设置为2020年3月2日。类似地,将5月31日加1个月将得出6月31日,这将延续到7月1日。因此,您需要先添加几个月(请参见Adding months to a Date in JavaScript),然后减去一天(请参阅Add days to JavaScript Date)。
答案 3 :(得分:0)
结果是有一个非常简单的解决方案。使用setMonth()方法可以传递可选的dayValue参数(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth)。使用它,代码将变成:
new Date(
date.setMonth(
date.getMonth() + 3,
date.getDate() - 1
)
)