Как получить количество недель, которые являются частью месяца - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю 2d массив для дней месяца (чтобы создать представление календарного месяца), и мне нужно определить c высоту этого массива.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Ваш алгоритм в порядке, но вам не нужна библиотека, например,

// 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 недель для всех месяцев и заполняют их, начиная с первого ряда.

0 голосов
/ 24 февраля 2020

После некоторых исследований я решил это по-своему. Я делюсь с вами кодом:

import moment from 'moment';

const height = calcMonthArrayHeight(moment());

function calcMonthArrayHeight(day) {
    const firstDay = day.startOf('month').isoWeekday() - 1;
    return Math.ceil((firstDay + day.daysInMonth()) / 7);
}


...