<๋ค์ด๊ฐ๋ฉฐ>
๋ฌ๋ ฅ ๋ด๋ถ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ง๊ฐ ์์ด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฒ 4์๋ฌ์ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.
์์์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ๋ฌ๋ ฅ์๋ ํด๋น ์์ ๋ ์ง ๋ฟ๋ง ์๋๋ผ, ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๋ ์ ์, ๋ด์์ ๋ ์ง๊ฐ ์กฐ๊ธ์ฉ ๋ค์ด๊ฐ ์๋ค. ์ด ๋ถ๋ถ๋ ์ผ๋ง๋ ํ์ํ์ง ๊ณ์ฐ ํด๋ด์ด์ ๋ฐ์ดํฐ์ ์ถ๊ฐํ ๊ฒ์ด๋ค.
1. getCanlendarColumns
// ๋ด ํ์ผ์์ import๋ ์ต์ข
๋ณธ
// now๋ฅผ ์ ์ธํ์ง ์์๋๋ฐ ์ ๋์๊ฐ๊น?
// now๋ฅผ ์ ์ธํ์ง ์์ ๊ฒ์ด ๋ง๋ค. ๊ทผ๋ฐ ๊ทธ๋ฅ dayjs()์ ํ๋ผ๋ฏธํฐ ์ ๋ฃ์ ๊ฒฝ์ฐ, dayjs()๋ ์ต์ ๋ ์ง๋ฅผ ๋ฐํํ๋ค.
// ์ด๊ฑธ ์ด์ฉํ ๊ฒ์ด๋ค. ๊ทธ๋ฅ now ๋ค ์ง์๋ฒ๋ ค๋ ๋์ํ๋ค.
export const getCalendarColumns = (now) => { // now๋ ๋ฌด์กฐ๊ฑด ํ์ฌ ์๊ฐ์ด ๋ค์ด๊ฐ.
const start = dayjs(now).startOf("month"); // 11.1
const end = dayjs(now).endOf("month"); // 11.30
const endDate = dayjs(end).get("date"); // end๋ ์์์ ๋์จ ๊ฑธ๋ก 11์ 30์ผ์ด ๋ค์ด๊ฐ๊ณ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ 30๋ง ์ด๋ค. -> ๋ฌ์ length
const columns = [];
for (let i = 0; i < endDate; i += 1) {
const date = dayjs(start).add(i, "day"); // start๋ ์ง์์ ์ผ ๋จ์๋ก i๋งํผ ๋ํ๋ค. 11์ 1์ผ์์ 11์ (i+1)์ผ๋ก
columns.push(date); // ํด๋น ๊ฐ์ ๋ฐฐ์ด์ ๋ฃ๋๋ค.
}
const filledColumns = fillEmptyColumns(columns, start, end);
return filledColumns;
};
2.fillEmptyColumns
import dayjs from "dayjs";
// ๋ฌ๋ ฅ์ ๋น ๋ถ๋ถ์ ์ ์์ด๋ ๋ด์์ ๋ ์ง๋ฅผ ์กฐ๊ธ์ฉ ํฌํจํ๋ค.
// ๊ทธ๊ฑธ ๋ํ๋ด์ฃผ๊ธฐ ์ํ ํจ์, ๋ฑ ํด๋น ์ ๋ ์ง๋ง ๋ฐ์์, ์์ ๋ ์ง, ๋ ๋ ์ง๋ก ์ ๋ค ์ฑ์์ค
export const fillEmptyColumns = (columns, start, end) => {
const filledColumns = columns.slice(0);
// slice๋ ๋ถ๋ถ ๋ณต์ฌ์ธ๋ฐ (์์ ์ธ์, ๋ณต์ฌํ ๋์ธ์) ํน์ (์์์ธ์)๋ก ์ ๋๋ค. ์ด๊ฑด ๋ ๋ฒ์งธ ๊ฒฝ์ฐ๋ก ์ฒ์๋ถํฐ ๋๊น์ง ๋ณต์ฌํด ๋ฃ๊ฒ ๋ค๋ ์๋ฆฌ์ด๋ค.
// 1. ์ฒซ๋ ์ด์ ๊ณต๋ฐฑ ์ฑ์ฐ๊ธฐ
const startDay = dayjs(start).get("day"); // ์์ ๋ ์ง์ ์์ผ๋งํผ ๋ท ๊ณต๋ฐฑ์ด ํ์ํจ ์ผ: 0~ ํ : 6์ผ๋ก day.js๊ฐ ๊ณ์ฐํจ์ ์์ง ๋ง์
for (let i = 1; i <= startDay; i += 1) {
const date = dayjs(start).subtract(i, "day");
filledColumns.unshift(date);
}
// ["10.30","10.31","11.1",... "11.31"]
// 2. ๋ง์ง๋ง๋ ์ดํ ๊ณต๋ฐฑ ์ฑ์ฐ๊ธฐ
const endDay = dayjs(end).get("day");
/**
0 -> 6 // ๋ง์ง๋ง ๋ ์ด ์ผ์์ผ์ด๋ฉด ๋ค๋ก 6๊ฐ๋ฅผ ์ฑ์์ผ ํ๋ค.
1 -> 5 // ๋ง์ง๋ง ๋ ์ด ์์์ผ์ด๋ฉด ๋ค๋ก 5๊ฐ๋ฅผ ์ฑ์์ผ ํ๋ค.
2 -> 4 // ๋ง์ง๋ง ๋ ์ด ํ์์ผ์ด๋ฉด ๋ค๋ก 4๊ฐ๋ฅผ ์ฑ์์ผ ํ๋ค.
endDay + ? = 6
*/
for (let i = 1; i <= 6 - endDay; i += 1) { // ๋ง์ง๋ง ๋ ์ด ํ์์ผ์ด๋ฉด, ๋งจ ๋ง์ค์ด ์ผ์ํ 3๊ฐ ์ ํ๊ณ 4์นธ ๋น ๊ฑฐ์ 6-2(ํ์์ผ์ ์ซ์๊ฐ)=4
const date = dayjs(end).add(i, "day"); // end๊ฐ 4.30์ผ์ด๋ฉด ๋ค์ ๋ฌ๋ก ๋์ด๊ฐ 5.1, 5์ 31์ผ์ผ ๊ฒฝ์ฐ๋ ๋ค์ ๋ฌ๋ก ๋์ด๊ฐ
filledColumns.push(date);
}
return filledColumns;
};
** ์ก๋ค ์ง์ **
(1) unShift ํจ์
[1,2,3].unshift(333);
// [333,1,2,3]
ํด๋น ํจ์๋ก ๋ฐฐ์ด ์์ ๋ฃ์ผ๋ฉด, ๋ฐฐ์ด์ ์ ค ์์๋ฆฌ index: 0๋ฒ์ ๋ค์ด๊ฐ๋ค.
๋ง์ฝ 2๊ฐ ์ด์์ ์ธ์๋ฅผ ๋ฃ์์ ๊ฒฝ์ฐ ๊ทธ ์์ ๊ทธ๋๋ก index 0๋ฒ ๋ถํฐ ๋ค์ด๊ฐ๋ค.
(2) [ ].push(0)
unshift๋ ๋ฐ๋๋ก 0์ด๋ ๊ฐ์ ๋งจ ๋ index์ ์ง์ด๋ฃ๋๋ค.
(3) [ ]. slice(A,B)
ํด๋น ๋ฐฐ์ด์ A ๊ฐ๋ถํฐ B๊ฐ ์ง์ ๊น์ง ์๋ผ์ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฐํํ๋ค.
[ ].slice(A) ์ ๊ฐ์ด ํ๋์ ์ธ์๋ง ์ ์ผ๋ฉด A ๊ฐ๋ถํฐ ๋งจ ๋ ๋ฐฐ์ด ๊ฐ๊น์ง ์๋ผ์ ๋ถ๋ถ ๋ฐฐ์ด ๋ง๋ค์ด ๋ฐํํ๋ค.
3. ์ค์ค๋ก ํด๋ณด๊ธฐ
(1)
์ด๋ค ์๊ฐ ๋ณ์์ format์ ์จ๋ฒ๋ฆฌ๋ฉด ํด๋น ๋ณ์๋ ๋ ์ด์ dayjs () ๋ก ๋ฌถ์ด๋ day.js์ ํจ์๋ฅผ ์ธ ์๊ฐ ์๋ค.
const a = dayjs(start).get(date)
console.log(a)
a๋ NaN (๊ณ์ฐ ํ ์ ์๋ ๊ฐ)์ด ๋์จ๋ค.
(2)
1๋ฒ getCalendarColumns์์ ๋ณ์๋ฅผ ๋ง๋ค์์ผ๋ฉด ๊ทธ๊ฑธ ๊ฐ์ ธ๋ค ์ฐ์.
๋ ์ง๊ธ fillEmptyColumn ์์ ๋ฌ ์ฒซ์ผ๊ณผ ๋ง์ผ์ ๋ง๋๋ ํจ์๋ฅผ ๋ ์ด์ฉํด์ ๋ณ์๋ฅผ ๋ง๋ค์ด ์ฝ๋๊ฐ ์ค๋ณต๋๋ค.
import dayjs from "dayjs";
import isBetween from "dayjs";
import isSameOrBefore from "dayjs";
import isSameOrAfter from "dayjs";
dayjs.extend(isBetween);
dayjs.extend(isSameOrBefore);
dayjs.extend(isSameOrAfter);
export const getCalendarColumns = (now) => {
const start = dayjs(now).startOf("month");
const end = dayjs(now).endOf("Month");
const monthLength = dayjs(end).get("date");
let columns = [];
for(i=0 ; i < monthLength; i +=1) {
columns[i] = i+1;
}
const filledColumn = fillEmptyColumn(columns, now)
console.log("----------Test-----------")
console.log("now", now)
console.log("startof",start)
console.log ("endof", end)
console.log("Length", monthLength)
console.log("columns", columns)
return filledColumn;
}
export const fillEmptyColumn = (columns, now) => {
let tempColumns = columns.slice(0);
const firstDay = dayjs(now).startOf("month").get("day");
const lastDay = dayjs(now).endOf("month").get("day");
console.log("lastDay", lastDay)
for(i=0; i< firstDay; i +=1) {
const a = dayjs(now).subtract(1,"month").endOf("month").get("date")
tempColumns.unshift(a - i)
}
for(i=0;i<6-lastDay; i +=1) {
const b = dayjs(now).add(1, "month").startOf("month").get("date")
console.log("b",b)
tempColumns.push(b + i)
}
console.log("tempcolumns",tempColumns)
return tempColumns;
}
(3)
const date = dayjs(start).add(i, "day").get("date")
์ผ์๋ฅผ ์ถ๊ฐํ ๋๋ "date" ๊ฐ ์๋ "day"๋ฅผ ์จ์ผ ํ๋ค.
.get("date")๋ ์ผ์ ์ด๊ณ .get("day") ๋ ์์ผ์ ํด๋นํ๋ ์ซ์๋ฅผ ๋ฐํํ์ผ๋
add๋ substract ์์๋ .add(i,"day") ํด์ผ์ง ์ผ์๊ฐ ์ถ๊ฐ๋์ ๋์จ๋ค.
๋ํ ํด๋นํจ์๋ 2023.04.30 ์์ day๋ก 1์ ๋ํ๋ฉด์ 2023.05.01๋ก ๋ฐ๊ฟ์ค๋ค. smart ํ๋ค.
(4) Columns ์์ฒด๋ฅผ ๋ ์์ผ ์๋ถ์ด ๊ฐ์ผ๋ก ์ค์ผ ํ๋ค!!!
๋ด๊ฐ ๋ง๋ ํจ์๋ ๋ ์์ผ ์๋ถ์ด ํํ๊ฐ ์๋๋ผ ์ผ ์๋ง ๋ณด๋ด์คฌ๋ค.
์ด๋ฌ๋ฉด Columns๋ฅผ ๋ณธ ์ปดํฌ๋ํธ์์ ๋ฐ์์ dayjs ๋ด์ฅ ํจ์๋ฅผ ์ธ ์๊ฐ ์๋ค.
import dayjs from "dayjs";
import isBetween from "dayjs/plugin/isBetween";
import isSameOrBefore from "dayjs/plugin/isSameOrBefore";
import isSameOrAfter from "dayjs/plugin/isSameOrAfter";
dayjs.extend(isBetween);
dayjs.extend(isSameOrBefore);
dayjs.extend(isSameOrAfter);
export const getCalendarColumns = (now) => {
const start = dayjs(now).startOf("month");
const end = dayjs(now).endOf("month");
const length = dayjs(end).get("date");
console.log("---------------test----------------")
console.log("start", start)
console.log("end", end)
console.log("length", length)
let columns = []
for(let i = 1 ; i <= length ; i += 1) {
let temp = dayjs(start).add(i, "day")
columns.push(temp)
}
console.log(columns)
const finalColumns = fillEmptyColumn(start,end,columns)
console.log("finalcolumn", finalColumns)
return finalColumns
}
const fillEmptyColumn = (start, end, columns) => {
let tempcolumns = columns.slice(0);
const firstDay = dayjs(start).get("day")
console.log("์์์์ผ", firstDay)
const lastDay = dayjs(end).get("day")
console.log("๋์์ผ", lastDay)
for(let i=0; i < firstDay ; i +=1){
const date = dayjs(start).subtract(i, "day")
tempcolumns.unshift(date)
}
for(let i=0; i < 6-lastDay ; i +=1){
const date = dayjs(end).add(i, "day")
tempcolumns.push(date)
}
console.log(tempcolumns)
return tempcolumns
}
์๋ฐ์์ผ๋ก App.js ์ ๋ณด๋ด์ค์ผ ํ๋ค.
(5) ํ์๊ฐ๋ง์ ์ฐพ์ ๊ฒ
์ด๋ฐ ์์ผ๋ก ๋์์ผ ํจ.
์ฒ์์ ๊ทธ๋ฅ ์ปฌ๋ผ๊ฐ ๊ณ์ฐํ ๋, ๋๋ 4์๋ฌ๋ง ๋ฝ์๋ฌ๋ผ๊ณ ํ๋๋ฐ, ์๊พธ 3.31~๋ถํฐ 4.29์ผ๊น์ง ๋ฝ์์ฃผ๊ธธ๋ ์๋ชป ๋ ์ค ์๊ณ
for ๋ฃจํ ๋๋ฆด ๋, +1์ฉ ํด์ 4.1๋ถํฐ 4.30์ผ๊น์ง ๋๋ ธ์.
์ด๊ฒ ์๋ชป ๋์์. ์๋ํ๋ฉด 00:00 ์ ์ค์ 12์๋๊น 3.31 00: 00 ์ 4.1์ผ์ start๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด์์