Programming/React
[TS] 활동기록 API 호출하는 함수
mj73
2023. 4. 5. 16:35
오늘 날짜를 받아와서 오늘 날짜를 포함한 일주일을 계산한다.
일주일의 첫 시작은 한국시간 기준 일요일 오전 4시,
마지막 시간은 한국시간 기준 토요일 오전 3시이다.
const member= 1;
function getWeekStartEndDates(): { fromStartedAt: string, toStartedAt: string } {
const now = new Date();
// 일주일의 첫 시작일로 설정합니다. 일요일 4시로 고정합니다.
const startOfWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay(), 4 + 9);
// 일주일의 마지막 날짜로 설정합니다. 토요일 3시로 고정합니다.
const endOfWeek = new Date(now.getFullYear(), now.getMonth(), startOfWeek.getDate() + 6, 3 + 9);
// 주어진 형식으로 날짜를 문자열로 변환합니다.
const fromStartedAt = startOfWeek.toISOString().substring(0, 10) + 'T' + startOfWeek.toISOString().substring(11, 19).replace(/:/g, '%3A');
const toStartedAt = endOfWeek.toISOString().substring(0, 10) + 'T' + endOfWeek.toISOString().substring(11, 19).replace(/:/g, '%3A');
return { fromStartedAt, toStartedAt };
}
const [events, setEvents] = useState<EventInput[]>([]);
const { fromStartedAt, toStartedAt } = getWeekStartEndDates();
useEffect(() => {
async function fetchEvents() {
try {
const res = await fetch(
`http://localhost:8080/api/v1/activity-records?memberId=${member}&fromStartedAt=${encodeURIComponent(fromStartedAt)}&toStartedAt=${encodeURIComponent(toStartedAt)}`
);
const data = await res.json();
if (data.length > 0) {
const events = data.map((item: any) => {
const startedAt = new Date(item.startedAt).toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' }).replace(/\. /g, '-');
const finishedAt = new Date(item.finishedAt).toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' }).replace(/\. /g, '-');
return {
id: item.categoryId,
title: item.categoryName,
start: startedAt,
end: finishedAt,
};
});
setEvents(events);
}
} catch (error) {
console.error(error);
}
}
fetchEvents();
}, [fromStartedAt, toStartedAt]);