mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2025-12-12 11:36:20 +00:00
128 lines
4.2 KiB
JavaScript
128 lines
4.2 KiB
JavaScript
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;
|