получить количество недель (строк) в месяце с moment.js - PullRequest
4 голосов
/ 09 октября 2019

Я хотел бы получить количество календарных строк (недель) в любом месяце, используя момент

Например:

Это будет 5

enter image description here

и это будет 6

enter image description here

Вот с чем мне приходится работать:

У меня есть месяц, начало месяца и конец месяца как элементы

const month; // (month moment obj)
const start = moment(month).startOf('month');
const end = moment(month).endOf('month');

Вот что я пробовал до сих пор (без удачи)

const weeks = end.diff(start, 'week'); // always gives 4
const weeks = moment.duration(end - start).weeks() + 1; // always gives 5

Я действительно предпочел бы использовать моменты для простоты и точности. Я видел здесь несколько простых ответов, но ни один из них не является действительно надежным.

Есть идеи? Спасибо !!

1 Ответ

3 голосов
/ 10 октября 2019

Это любопытная проблема. Отредактированное новое решение: подсчитайте дни первой недели (первая строка), затем следующие недели (средние строки), если есть ожидающие дни, добавьте еще одну строку:

Учитывая, что неделя начинается в понедельник с 'isoWeekDay () '.

По состоянию на 9 октября 2019 года:

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
...