Month Calendar Grid Builder for UIs

Build a flat seven-column calendar grid for any month, honoring a configurable first weekday and blank padding cells.

JavascriptData Integrity

Code

snippet
export function buildMonthGrid(year, month, options = {}) {
  if (!Number.isInteger(year) || year < 1 || year > 9999) {
    throw new RangeError("year must be an integer between 1 and 9999");
  }
  if (!Number.isInteger(month) || month < 1 || month > 12) {
    throw new RangeError("month must be an integer between 1 and 12");
  }
  const weekStartsOn = options.weekStartsOn ?? 0;
  if (!Number.isInteger(weekStartsOn) || weekStartsOn < 0 || weekStartsOn > 6) {
    throw new RangeError("weekStartsOn must be an integer between 0 and 6");
  }
  const first = new Date(Date.UTC(year, month - 1, 1));
  const daysInMonth = new Date(Date.UTC(year, month, 0)).getUTCDate();
  const offset = (first.getUTCDay() - weekStartsOn + 7) % 7;
  const totalCells = Math.ceil((offset + daysInMonth) / 7) * 7;
  const cells = [];
  for (let index = 0; index < totalCells; index += 1) {
    const day = index - offset + 1;
    cells.push(day >= 1 && day <= daysInMonth ? day : null);
  }
  return { year, month, weekStartsOn, cells };
}