돌아가기

n일 전 '일' 출력하기

중요도: 4

date를 기준으로 days일 전 '일’을 반환하는 함수 getDateAgo(date, days)를 만들어보세요,

오늘이 20일이라면 getDateAgo(new Date(), 1)는 19를, getDateAgo(new Date(), 2)는 18을 반환해야 합니다.

days365일 때도 제대로 동작해야 합니다.

let date = new Date(2015, 0, 2); // 2015년 1월 2일

alert( getDateAgo(date, 1) ); // 1, (2015년 1월 1일)
alert( getDateAgo(date, 2) ); // 31, (2014년 12월 31일)
alert( getDateAgo(date, 365) ); // 2, (2014년 1월 2일)

주의: 함수는 date를 변경하지 않아야 합니다.

테스트 코드가 담긴 샌드박스를 열어 정답을 작성해보세요.

구현 아이디어는 간단합니다. date에서 주어진 숫자를 빼면 됩니다.

function getDateAgo(date, days) {
  date.setDate(date.getDate() - days);
  return date.getDate();
}

그런데 주의사항에서 date를 변경하지 말라고 했기 때문에 위와 같이 작성하면 오답이 됩니다. 외부 코드에서 date를 사용하고 있는 경우, date를 수정하게 되면 원치 않는 일이 발생할 수 있습니다.

아래와 같이 date를 복사하면 date를 변경시키지 않고 원하는 기능을 구현할 수 있습니다.

function getDateAgo(date, days) {
  let dateCopy = new Date(date);

  dateCopy.setDate(date.getDate() - days);
  return dateCopy.getDate();
}

let date = new Date(2015, 0, 2); // 2015년 1월 2일

alert( getDateAgo(date, 1) ); // 1, (2015년 1월 1일)
alert( getDateAgo(date, 2) ); // 31, (2014년 12월 31일)
alert( getDateAgo(date, 365) ); // 2, (2014년 1월 2일)

테스트 코드가 담긴 샌드박스를 열어 정답을 확인해보세요.