0

我正在使用 date-fns 库来构建日历,我需要获取一个月的周数。

let start = startOfMonth(date)
let end = endOfMonth(date)
let firstWeek = getISOWeek(start)
let lastWeek = getISOWeek(end)

let weeks = []

for (let i = firstWeek; i < lastWeek + 1; i++) {
  weeks.push(i)
}

return weeks

这适用于大多数月份,除了 12 月份,因为 firstWeek 和 lastWeek 分别是“48”和“1”,所以周是空的。

我知道我可以用更复杂的循环来解决这个问题,以检查每次迭代是否高于或低于前一次,但我想知道是否有更自然/简单的方法可以使用 date-fns(或 es6)来实现这一点。

4

1 回答 1

0

最好推迟获取 ISO 周并迭代实际日期,而不是处理周索引号。

let startOfCurrent = startOfMonth(date)
let startOfNext = addMonths(startOfCurrent, 1)

let weeks = []

for (let i = startOfCurrent; isBefore(i, startOfNext); i = addWeeks(i, 1)) {
  weeks.push(getISOWeek(i))
}

return weeks
于 2019-04-16T23:05:21.053 回答