Javascript 从moment.js获取一个月内的周数(行数)

Javascript 从moment.js获取一个月内的周数(行数),javascript,momentjs,Javascript,Momentjs,我想使用momentjs获得任何月份的日历行数(周) 例如: 这将是5 这将是6 以下是我必须处理的问题: 我将月、月初和月底作为一个时刻项目 const month; // (month moment obj) const start = moment(month).startOf('month'); const end = moment(month).endOf('month'); 以下是我迄今为止尝试过的(没有运气) 为了简单和准确,我真的更喜欢使用矩.js。我在这里看到了一些纯JS

我想使用momentjs获得任何月份的日历行数(周)

例如:

这将是
5

这将是
6

以下是我必须处理的问题:

我将月、月初和月底作为一个时刻项目

const month; // (month moment obj)
const start = moment(month).startOf('month');
const end = moment(month).endOf('month');
以下是我迄今为止尝试过的(没有运气)


为了简单和准确,我真的更喜欢使用矩.js。我在这里看到了一些纯JS的答案,但没有一个是真正可靠的。

这是一个奇怪的问题。已编辑的新解决方案:计算第一周的天数(第一行),然后计算下一周的天数(中间行),如果有待定天数,请添加另一行:

考虑到该周从周一开始,以“isoWeekDay()”开头

截至2019年10月9日:

let now = moment('9/oct/2019');
// First row
let firstWeekDays = 7 - now.startOf('month').isoWeekday() + 1;
let rows = 1
rest = now.daysInMonth() - firstWeekDays;
// Middle rows
let middleRows = Math.floor(rest/7);
rows = rows + middleRows;
rest = rest - (middleRows * 7);
// Last row?
if (rest > 0) {
    rows = rows + 1;
}
console.log(rows); // 5

您还应该考虑偏移量


function weeksOfMonth (input = moment()) {
  const startMonth = input.clone().startOf('month');
  const startWeek = startMonth.clone().startOf('isoWeek');
  const startOffset = startMonth.diff(startWeek, 'days'); 
  
  const endMonth = input.clone().endOf('month');
  const endWeek = endMonth.clone().endOf('isoWeek');
  const endOffset = endWeek.diff(endMonth, 'days'); 

  return Math.ceil((endMonth.diff(startMonth, 'days') + startOffset + endOffset) / 7);
}


事实上,一月的有一个问题,它的返回
-47
我正在寻找一个更好的,一月和十二月是冲突的。2021年1月不工作,2021年2月需要注意一周的开始日期。。。

function weeksOfMonth (input = moment()) {
  const startMonth = input.clone().startOf('month');
  const startWeek = startMonth.clone().startOf('isoWeek');
  const startOffset = startMonth.diff(startWeek, 'days'); 
  
  const endMonth = input.clone().endOf('month');
  const endWeek = endMonth.clone().endOf('isoWeek');
  const endOffset = endWeek.diff(endMonth, 'days'); 

  return Math.ceil((endMonth.diff(startMonth, 'days') + startOffset + endOffset) / 7);
}