export function getCalendarLayout(d, highlight) { if (!d) d = new Date(); var calendar = [...Array(6)].map(() => Array(7)); var today = [...Array(6)].map(() => Array(7)); const year = d.getFullYear(); const month = d.getMonth() + 1; const day = d.getDate(); const weekdayOfMonthFirst = new Date(`${year}-${month}-01`).getDay(); const leapYear = (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)); const daysInMonth = (((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 31 : ((month == 2 && leapYear) ? 29 : ((month == 2 && !leapYear) ? 28 : 30))); const daysInNextMonth = ((month == 1 && leapYear) ? 29 : ((month == 1 && !leapYear) ? 28 : ((month == 7 || month == 12) ? 31 : (((month <= 6 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 30 : 31)))); const daysInLastMonth = ((month == 3 && leapYear) ? 29 : ((month == 3 && !leapYear) ? 28 : ((month == 1 || month == 8) ? 31 : ((month <= 7 && month % 2 == 1) || (month >= 9 && month % 2 == 0)) ? 30 : 31))); var monthDiff = (weekdayOfMonthFirst == 0 ? 0 : -1); var dim = daysInLastMonth; var toFill = (weekdayOfMonthFirst == 0 ? 1 : (daysInLastMonth + 1 - weekdayOfMonthFirst)); var i = 0, j = 0; while (i < 6 && j < 7) { calendar[i][j] = toFill; if (toFill == day && monthDiff == 0 && highlight) today[i][j] = 1; else if (monthDiff == 0) today[i][j] = 0; else today[i][j] = -1; toFill++; if (toFill > dim) { monthDiff++; if (monthDiff == 0) dim = daysInMonth; else if (monthDiff == 1) dim = daysInNextMonth; toFill = 1; } j++; if (j == 7) { j = 0; i++; } } var cal = []; for (var i = 0; i < 6; i++) { var arr = []; for (var j = 0; j < 7; j++) { arr.push({ day: calendar[i][j], today: today[i][j] }); } cal.push(arr); } return cal; } export default getCalendarLayout; // export function getCalendarLayout(d, highlight) { // if (!d) d = new Date(); // var calendar = [...Array(6)].map(() => Array(7)); // var today = [...Array(6)].map(() => Array(7)); // const year = d.getFullYear(); // const month = d.getMonth() + 1; // const day = d.getDate(); // const weekdayOfMonthFirst = new Date(`${year}-${month}-01`).getDay(); // const leapYear = (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)); // const daysInMonth = (((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 31 : ((month == 2 && leapYear) ? 29 : ((month == 2 && !leapYear) ? 28 : 30))); // const daysInNextMonth = ((month == 1 && leapYear) ? 29 : ((month == 1 && !leapYear) ? 28 : ((month == 7 || month == 12) ? 31 : (((month <= 6 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 30 : 31)))); // const daysInLastMonth = ((month == 3 && leapYear) ? 29 : ((month == 3 && !leapYear) ? 28 : ((month == 1 || month == 8) ? 31 : ((month <= 7 && month % 2 == 1) || (month >= 9 && month % 2 == 0)) ? 30 : 31))); // var monthDiff = (weekdayOfMonthFirst == 1 ? 0 : -1); // var dim = daysInLastMonth; // var toFill = (weekdayOfMonthFirst == 1 ? 1 : (weekdayOfMonthFirst == 0 ? (daysInLastMonth - 5) : (daysInLastMonth + 2 - weekdayOfMonthFirst))); // var i = 0, j = 0; // while (i < 6 && j < 7) { // calendar[i][j] = toFill; // if (toFill == day && monthDiff == 0 && highlight) today[i][j] = 1; // else if (monthDiff == 0) today[i][j] = 0; // else today[i][j] = -1; // toFill++; // if (toFill > dim) { // monthDiff++; // if (monthDiff == 0) dim = daysInMonth; // else if (monthDiff == 1) dim = daysInNextMonth; // toFill = 1; // } // j++; // if (j == 7) { // j = 0; // i++; // } // } // var cal = []; // for (var i = 0; i < 6; i++) { // var arr = []; // for (var j = 0; j < 7; j++) { // arr.push({ // day: calendar[i][j], // today: today[i][j] // }); // } // cal.push(arr); // } // return cal; // } // export default getCalendarLayout;