【发布时间】:2023-04-05 07:34:01
【问题描述】:
用香草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 对象,最好是最后一天。
【问题讨论】:
-
Moment 有(有?)方法,如
moment(date).subtract(30, "days")或moment(date).subtract(1, "month")。不确定 Moment 的继任者 Luxon 的语法是什么 -
上个月只是
clone.getMonth(),即4。 -
不是“减去 30 天”那么简单。当月份中的某天超出范围时,它将增加或减少差异。例如
new Date(2021, 2, 0)返回 2 月的最后一天 -
你到底需要什么结果?
-
上个月的日期对象,最好是上个月的最后一天。我通过添加 if 语句得到了这一点,但是这样的解决方案让我怀疑我错过了一些东西。 getMonth 行为对我来说看起来不可靠。
标签: javascript date