如何使用moment.js每月获得星期天的第二周

时间:2020-02-02 05:25:57

标签: momentjs

我正在使用moment.js在我的项目中使用日历功能,我想获取给定月份“星期日”的第二周的日期。 请帮助我。

1 个答案:

答案 0 :(得分:1)

您可以使用.day(n),然后将其与.startOf('month')结合使用。

此方法可用于设置星期几,星期日为0,星期六为6。

如果给出的值为0到6,则结果日期将在当前(星期日至星期六)的一周之内。

如果超出范围,它将持续长达数周。

演示:

const days = {
    Mon: 1,
    Tue: 2,
    Wed: 3,
    Thu: 4,
    Fri: 5,
    Sat: 6,
    Sun: 7
}
const nthDayOfMonth = (monthMoment, day, weekNumber) => {
  let m = monthMoment.clone()
   .startOf('month')                     // go to the beginning of the month
   .day(day)
  if (m.month() !== monthMoment.month()) m.add(7, 'd');
  return m.add(7 * (weekNumber - 1), 'd').format('dddd YYYY-MM-DD')
}

console.log({
  firstSaturdayThisMonth: nthDayOfMonth(moment(), days.Sat, 1),
  firstSundayThisMonth: nthDayOfMonth(moment(), days.Sun, 1),
  firstMondayThisMonth: nthDayOfMonth(moment(), days.Mon, 1),
  firstTuesdayThisMonth: nthDayOfMonth(moment(), days.Tue, 1),
  firstWednesdayThisMonth: nthDayOfMonth(moment(), days.Wed, 1),
  firstThursdayThisMonth: nthDayOfMonth(moment(), days.Thu, 1),
  firstFridayThisMonth: nthDayOfMonth(moment(), days.Fri, 1),
  secondSaturdayThisMonth: nthDayOfMonth(moment(), days.Sat, 2),
  secondSundayThisMonth: nthDayOfMonth(moment(), days.Sun, 2),
  secondMondayThisMonth: nthDayOfMonth(moment(), days.Mon, 2),
  secondTuesdayThisMonth: nthDayOfMonth(moment(), days.Tue, 2),
  secondWednesdayThisMonth: nthDayOfMonth(moment(), days.Wed, 2),
  secondThursdayThisMonth: nthDayOfMonth(moment(), days.Thu, 2),
  secondFridayThisMonth: nthDayOfMonth(moment(), days.Fri, 2),
  secondTuedayMarch2020: nthDayOfMonth(moment('2020-03-15'), days.Tue, 2),
  thirdFridayDecember1986: nthDayOfMonth(moment('1986-12-04'), days.Fri, 3)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>