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]);