Ваш алгоритм в порядке, но вам не нужна библиотека, например,
// Month is calendar month number, 1 for Jan, 2 for Feb, etc.
// Based on ISO weeks: Monday is first day of week
function getHeightOfWeekMatrix(year, month) {
let first = (new Date(year, month-1, 1).getDay() || 7) - 1;
let last = new Date(year, month, 0).getDate();
return Math.ceil((first + last) / 7);
}
// Number of weeks for matrix 2021
let y = 2021;
let m = 'JanFebMarAprMayJunJulAugSepOctNovDec'.match(/\w{3}/g);
for (let i=0; i<m.length; i++)
console.log(m[i] + ' ' + y + ': ' + getHeightOfWeekMatrix(y, i+1));
Большинство календарей используют 6 недель для всех месяцев и заполняют их, начиная с первого ряда.