日期选择器,要求获取一个月当中完整的自然周?

新手上路,请多包涵

企业微信截图_4ac900e9-d89e-4db4-970c-d1202b9fc3d5.png
如上图,来自antd的DatePicker组件,该月内这三天对应的完整周不在同一个月份里,限制用户不能选择这两周,只允许选择中间四个完整的自然周。这个限制该如何实现呢?

阅读 2.2k
2 个回答
function getDisabledDayListByMonth (month) {
  const disabledDateList = []
  const startDate = dayjs(month).startOf('month') // 获取这个月第一天
  const startDay = startDate.day() // 获取这个月第一天是周几,0-6
  const endDate = dayjs(month).endOf('month') // 获取这个月最后一天
  const endDay = endDate.day() // 获取这个月最后一天是周几
  if (startDate !== 0) { // 不是周日, 将第一周不满足的日期放入数组
    const disabledLen = 7 - startDay
    for (let i = 0; i < disabledLen; i++) {
      disabledDateList.push(startDate.add(i, 'day').format('YYYY-MM-DD'))
    }
  }
  if (endDate !== 5) { // 不是周六, 将最后一周不满足的日期放入数组
    const disabledLen = endDay
    for (let i = disabledLen; i >= 0; i--) {
      disabledDateList.push(endDate.subtract(i, 'day').format('YYYY-MM-DD'))
    }
  }
  console.log(disabledDateList)
  return disabledDateList
}

getDisabledDayListByMonth('2023-03')

补充:又看了下题你的一周是从周一开始的,我写的这个是从周日开始算的,所以你还得调整下代码。

如果使用了 dayjs 的话,可以使用dayjs-plugin-weekofmonth 这个 plugin 来获取本月的第几周。然后按照你的实际需求去设置周的起始,去判断当周落在本月,还是前/后一个月。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题