티스토리 뷰

TIL

2024. 01. 28 날짜로만 디데이 구하기

윤미주 2024. 1. 29. 01:56

날짜를 구해서 Dday를 구하고 싶었다.

 

처음 작성한 코드는 아래와 같다.

export default function Todo({ todo, onIsDone, onDelete }) {
  const handleIsDone = () => {
    const status = todo.status === "working" ? "isDone" : "working";
    onIsDone({ ...todo, status: status });
  };
  const handleDelete = () => onDelete(todo);

  const planDate = new Date(todo.date);
  const nowDate = todo.today;

  const gapTime = planDate.getTime() - nowDate.getTime();

  const doneDate = () => {
    const done = new Date();
    const year = done.getFullYear();
    const month = ("0" + (1 + done.getMonth())).slice(-2);
    const date = ("0" + done.getDate()).slice(-2);
    return `${year} .${month} .${date}`;
  };

  const gapday = () => {
    const gap = Math.ceil(gapTime / (1000 * 3600 * 24));
    if (todo.status === "isDone") {
      return `${doneDate()} 완료`;
    }
    return gap === 0 ? "🚨 마감기한이 오늘까지입니다 🚨" : `D-day ${gap}`;
  };

 

디데이가 출력은 되는데 12시가 지나서 다시 출력해보니 

 

.....??

 

디데이가 -1씩 되고 있었다.

 

빨간색으로 표기된 날짜가 마감날인데, 29일 작성했으니 

gap === 0 ? "🚨 마감기한이 오늘까지입니다 🚨"

해당 코드가 작동되어야 한다.

 

날짜를 콘솔로 찍어보았을때 잘 출력되는 것을 보아서는

날짜만으로 계산되는 것이 아닌 시간도 함께 계산될 거라고 예상이 되어졌다.

 

그래서 시간을 무조건 0으로 주기로 했다.

  const planDate = new Date(todo.date);
  planDate.setHours(0, 0, 0, 0);

  const nowDate = todo.today;
  nowDate.setHours(0, 0, 0, 0);

 

이렇게 했더니 날짜가 너무 잘나왔다.