fix(frontend): useCalendar 및 Schedule 날짜 처리 버그 수정

- useCalendar: initialDate가 문자열일 경우 Date 객체로 변환
- useCalendar: days 배열 추가 (캘린더 날짜 목록)
- useCalendar: canGoPrev 별칭 추가
- Schedule: currentDate가 Date 객체가 아닐 경우 안전하게 변환

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
caadiq 2026-01-21 18:01:09 +09:00
parent 64fc07044d
commit 81b78be010
2 changed files with 45 additions and 4 deletions

View file

@ -5,10 +5,17 @@ import { getTodayKST } from '@/utils';
/** /**
* 캘린더 * 캘린더
* 날짜 선택, 이동 캘린더 로직 제공 * 날짜 선택, 이동 캘린더 로직 제공
* @param {Date} initialDate - 초기 날짜 * @param {Date|string} initialDate - 초기 날짜
*/ */
export function useCalendar(initialDate = new Date()) { export function useCalendar(initialDate = new Date()) {
const [currentDate, setCurrentDate] = useState(initialDate); // initialDate가 Date 객체가 아니면 변환
const ensureDate = (date) => {
if (date instanceof Date) return date;
if (typeof date === 'string') return new Date(date);
return new Date();
};
const [currentDate, setCurrentDate] = useState(() => ensureDate(initialDate));
const [selectedDate, setSelectedDate] = useState(getTodayKST()); const [selectedDate, setSelectedDate] = useState(getTodayKST());
const year = currentDate.getFullYear(); const year = currentDate.getFullYear();
@ -20,6 +27,37 @@ export function useCalendar(initialDate = new Date()) {
const daysInMonth = new Date(year, month + 1, 0).getDate(); const daysInMonth = new Date(year, month + 1, 0).getDate();
const prevMonthDays = new Date(year, month, 0).getDate(); const prevMonthDays = new Date(year, month, 0).getDate();
// 캘린더에 표시할 날짜 배열 생성
const days = [];
// 이전 달 날짜
for (let i = firstDay - 1; i >= 0; i--) {
days.push({
day: prevMonthDays - i,
isCurrentMonth: false,
date: new Date(year, month - 1, prevMonthDays - i),
});
}
// 현재 달 날짜
for (let i = 1; i <= daysInMonth; i++) {
days.push({
day: i,
isCurrentMonth: true,
date: new Date(year, month, i),
});
}
// 다음 달 날짜 (6주 채우기)
const remaining = 42 - days.length; // 6주 * 7일 = 42
for (let i = 1; i <= remaining; i++) {
days.push({
day: i,
isCurrentMonth: false,
date: new Date(year, month + 1, i),
});
}
return { return {
year, year,
month, month,
@ -28,6 +66,7 @@ export function useCalendar(initialDate = new Date()) {
daysInMonth, daysInMonth,
prevMonthDays, prevMonthDays,
weekdays: WEEKDAYS, weekdays: WEEKDAYS,
days,
}; };
}, [year, month]); }, [year, month]);
@ -93,6 +132,7 @@ export function useCalendar(initialDate = new Date()) {
...calendarData, ...calendarData,
currentDate, currentDate,
selectedDate, selectedDate,
canGoPrev: canGoPrevMonth,
canGoPrevMonth, canGoPrevMonth,
goToPrevMonth, goToPrevMonth,
goToNextMonth, goToNextMonth,

View file

@ -143,11 +143,12 @@ function Schedule() {
const isMobile = useIsMobile(); const isMobile = useIsMobile();
// Zustand store // Zustand store
const { currentDate, setCurrentDate, selectedDate, setSelectedDate } = useScheduleStore(); const { currentDate: storedCurrentDate, setCurrentDate, selectedDate, setSelectedDate } = useScheduleStore();
// // - currentDate Date
const today = getTodayKST(); const today = getTodayKST();
const actualSelectedDate = selectedDate || today; const actualSelectedDate = selectedDate || today;
const currentDate = storedCurrentDate instanceof Date ? storedCurrentDate : new Date(storedCurrentDate || today);
// //
const year = currentDate.getFullYear(); const year = currentDate.getFullYear();