用vanilla javascript从给定的日期获取上个月的更好方法是什么?
快速搜索会告诉你该怎么做:
const getPreviousMonth = date => {
const clone = new Date(date.getTime())
clone.setMonth(date.getMonth() - 1)
return clone
}
问题是getPreviousDate(new Date(2021, 4, 31))
返回5月1日,而不是4月30日,这似乎意味着它只减去了30天。奇怪的是,getPreviousDate(new Date(2021, 2, 1))
正确地返回了2月1日,而不是1月的晚些时候,所以30天的理论是徒劳的。
考虑到这一点,上个月是否有最佳实践香草解决方案?目前,我添加了一行:if (date.getDate() === 31) newDate.setDate(-1)
,它将于4月29日返回(!?(。所以我相信有更好的解决方案。
PS.:只是想明确一点,我不想知道30天前是什么日期,但前一个月是什么月。因此,到5月31日,答案是4月,到3月1日,是2月。
编辑:具体来说,我希望在前一个月内返回Date对象,最好是在最后一天。
只需使用clone.setDate(0)
,即可获得上月的最后一天
const dates = [new Date(2021,0,15), new Date(2021,2,31)]
const getPreviousMonth = date => {
const clone = new Date(date)
clone.setDate(0)
return clone
}
dates.forEach(d=>{
console.log(getPreviousMonth(d))
})
这就是您想要的:
now = new Date();
if (now.getMonth() == 0) {
var current = new Date(now.getFullYear() - 1, 11, 1);
} else {
var current = new Date(now.getFullYear(), now.getMonth());
}
console.log(current);