有没有办法在单个语句中为日期对象设置日期和月份?
Is there a way to set date and month on a date object in a single statement?
我正在尝试通过添加特定时间段来计算基于另一个日期的日期。比方说,如果我想将 3 个月添加到一个日期,那么新日期应该是 3 个月后日期的前一天。以这个例子为例,下面是我最接近实现我想做的事情的代码:
new Date(
date
.setMonth(date.getMonth() + 3)
.setDate(date.getDate() - 1)
)
但是这个 returns 错误:TypeError: date.setMonth(...).setDate 不是一个函数。我认为方法链不起作用,所以我可能必须在下一条语句中设置日期。有没有办法在一条代码语句中做到这一点?
你可以这样
newDate = new Date(newDate.getFullYear(), newDate.getMonth() + 3, endDate.getDate() -1)
您可以扩展 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));
Is there a way to set date and month on a date object in a single statement?
是的。以下将月份设置为一月,将日期设置为一个语句的第一天:
let d = new Date();
d.setMonth(0, 1);
…if I want to add 3 months to a date, then the new date should be one day before the date after 3 months
不,您不能在一个语句中执行此操作,因为添加一个月需要考虑该月的天数。例如。 2020 年 1 月 31 日加上一个月,结果是
2 月 31 日,由于 2020 年 2 月只有 29 天,因此日期设置为 2020 年 3 月 2 日。同样,将 1 个月添加到 5 月 31 日得到 6 月 31 日,滚动到 7 月 1 日。因此您需要先添加月份(请参阅Adding months to a Date in JavaScript), then subtract one day (see Add days to JavaScript Date).
原来有一个非常简单的解决方案。 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
)
)
我正在尝试通过添加特定时间段来计算基于另一个日期的日期。比方说,如果我想将 3 个月添加到一个日期,那么新日期应该是 3 个月后日期的前一天。以这个例子为例,下面是我最接近实现我想做的事情的代码:
new Date(
date
.setMonth(date.getMonth() + 3)
.setDate(date.getDate() - 1)
)
但是这个 returns 错误:TypeError: date.setMonth(...).setDate 不是一个函数。我认为方法链不起作用,所以我可能必须在下一条语句中设置日期。有没有办法在一条代码语句中做到这一点?
你可以这样
newDate = new Date(newDate.getFullYear(), newDate.getMonth() + 3, endDate.getDate() -1)
您可以扩展 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));
Is there a way to set date and month on a date object in a single statement?
是的。以下将月份设置为一月,将日期设置为一个语句的第一天:
let d = new Date();
d.setMonth(0, 1);
…if I want to add 3 months to a date, then the new date should be one day before the date after 3 months
不,您不能在一个语句中执行此操作,因为添加一个月需要考虑该月的天数。例如。 2020 年 1 月 31 日加上一个月,结果是 2 月 31 日,由于 2020 年 2 月只有 29 天,因此日期设置为 2020 年 3 月 2 日。同样,将 1 个月添加到 5 月 31 日得到 6 月 31 日,滚动到 7 月 1 日。因此您需要先添加月份(请参阅Adding months to a Date in JavaScript), then subtract one day (see Add days to JavaScript Date).
原来有一个非常简单的解决方案。 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
)
)