【发布时间】:2020-02-24 08:19:19
【问题描述】:
我正在为月份创建二维数组(以创建日历月视图),我需要计算该数组的高度。
【问题讨论】:
标签: javascript date momentjs
我正在为月份创建二维数组(以创建日历月视图),我需要计算该数组的高度。
【问题讨论】:
标签: javascript date momentjs
经过一番研究,我以自己的方式解决了这个问题。我正在与您分享代码:
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);
}
【讨论】:
你的算法没问题,但你不需要库,例如
// 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 周,并从第一行开始填充。
【讨论】: