코드캠프 팀프로젝드 3주차 - 시간 계산하기

은채·2022년 7월 23일
0

team-project

목록 보기
16/28
post-thumbnail

백엔드에서 createdAt으로 준 값은
toISOString() 함수를 이용해서 나온 시간이다.

개인 포트폴리오를 만들 때 날짜로 검색하는 기능을 너무 하고 싶었었을 때.. pf님이 이 사실을 알려주었던 것이 생각났다!

역시 우리 백엔드에서 보내주는 시간도 ISOString이엇어...

toISOString함수는 UTC시간을 기준으로 반환하기 때문인데, 그 시간이 한국과 9시간차이의 오프셋을 갖는다.
UTC시간보다 9시간 더해진 시간이 한국 시간이다

우리 백엔드에서 보내준 시간은 ISOStirng 값에 심지어 9시간이 더해져서 한국 시간으로 맞춰져 있었다.

단순히 날짜, 시간을 띄우기만 할거면 엄청 편하겠지만...

우리는 방금전, 몇 분전, 몇 시간 전... 이걸 하려고 했던 거라 굉장히 난감해졌다

이 사실을 모르고 시간 기능 담당하시는 분들이 현재시간과, 받아온 값에 그냥 new Date()를 사용하고 있었는데, 시간이 아무리 지나도 방금전...

콘솔에 찍어보니 현재시간 - 작성시간 의 값이 음수가 나온다

받아온 값과 현재 시간에 new Date()를 해보니 작성시간이 현재시간보다 더 나중 시간이 되는 마법..

9시간이 늘어나버린다.
ISOString 형식끼리 ~분전이 가능할까?

우선 현재시간을 바꿔보고

 const offset = new Date().getTimezoneOffset() * 60000;
  const today = new Date(Date.now() - offset).toJSON();

~분전 ,,, 가능할까?ㅜ
우선 string이 되어버리면서 getTime()이 먹히지 않기 때문에... 어? 계산이 안된다...

그러던 중 팀원 분께서 알아오신 toUTCString() 을 사용해보기로 했다. 이것 역시 날짜를 문자열로 변환하여 UTC 시간대에서 해석해주는 함수!

export const getDateBefore = (value: string | number | Date) => {
  const today = new Date().toString();

  const timeValue = new Date(value).toUTCString();

  const betweenTime = Math.floor(
    (Date.parse(today) - (Date.parse(timeValue) - 32399000)) / 1000 / 60
  );

  if (betweenTime < 1) return "방금전";
  if (betweenTime < 60) {
    return `${betweenTime}분전`;
  }

  const betweenTimeHour = Math.floor(betweenTime / 60);

  if (betweenTimeHour < 24) {
    return `${betweenTimeHour}시간전`;
  }

  const betweenTimeDay = Math.floor(betweenTime / 60 / 24);
  if (betweenTimeDay < 365) {
    return `${betweenTimeDay}일전`;
  }

  return `${Math.floor(betweenTimeDay / 365)}년전`;
};
profile
반반무마니

0개의 댓글