如何可靠地从jsDate获取上月



用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);

相关内容

  • 没有找到相关文章

最新更新