만 나이 계산하기

수경, Sugyeong·2021년 10월 12일
0

문제풀이

목록 보기
1/3
post-thumbnail

1. 문제

getWesternAge 함수를 구현하기

  • 이 함수는 birthday 라는 인자를 받는다.
  • 이 birthday 는 Date 객체이다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 한다.
  • birthday 는 string이 아닌 Date 객체이다.
  • 예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 1990-03-21T00:45:06.562Z 으로 같다면 리턴 값은 30 이 되어야 한다.

2. 내가 쓴 코드

function getWesternAge(birthday) {
  let today = new Date();
  let bday = new Date(birthday);

  let age = today.getFullYear() - bday.getFullYear();
  // console.log(age);	// 결과가 에러가 뜬다면 일일히 console 을 넣어서 값을 확인해주면서 순차적으로 검사한다.

  let thisMonth = today.getMonth() + 1;
  let bdayMonth = bday.getMonth() + 1;
  
  let month = thisMonth - bdayMonth;
  // console.log(month);

  let day = today.getDate() - bday.getDate();
  // console.log(day);

  if (month > 0 || (month === 0 && day >= 0)) {
    // console.log("bb")
    return age;
  } else {
    // console.log("aa")
    return --age;
  }
}

//console.log(getWesternAge('1994-01-10'))/
console.log(getWesternAge('1982-10-13'))

3. 코드 설명

  1. 오늘 날짜 객체 생성 하는 코드인 new Date() 생성자를 today 라는 변수에 담아준다. birthday는 Date 객체 형태로 들어오기 때문에 이 역시 bday 라는 변수에 담아준다.

  2. 우리가 계산기로 2021-1997을 하게 되면 만 나이를 구할 수 있듯이 올해 년도에서 태어난 년도를 뺀 today.getFullYear() - bday.getFullYear() 값을 age 라는 변수에 할당해준다.

  3. getMonth 메서드는, 항상 현재 달보다 1 작은 값을 반환 하므로 주의해야한다. 그러므로 달을 구하는 코드에는 각각 +1 을 해줘야 한다. 그리고 각각의 값에 thisMonthbdayMonth 변수를 할당해준다.

  4. 이번 달과 태어난 달을 비교하여 if 문에서 사용해주어야 하니 이번 달에서 태어난 달을 뺀 thisMonth - bdayMonth 값을 month 라는 변수에 할당해준다.

  5. 오늘 일자와 태어난 일자를 비교하여 if 문에서 사용해주어야 하니 오늘 일자에서 태어난 일자를 뺀 today.getDate() - bday.getDate() 값을 day 라는 변수에 할당해준다.

  6. if 문의 조건으로 생일이 지났을 때 만 나이를 리턴 해주도록 조건식을 짜준다
    month > 0 의 의미는 이번 달에서 태어난 달을 뺀 것이 0 보다 크다는 의미이다. 예를 들어 이번 달이 11월인데 태어난 달이 10월이라면 나는 벌써 만 나이가 지난 것이다.
    month > 0 이거나 (or (||)) (month === 0 && day >= 0) 의 의미는 이번 달과 태어난 달이 같다면 태어난 일자가 0보다 같거나 크다는 것이다. 이는 태어난 달과 태어난 일자가 모두 같으면 그 날은 생일이므로 만 나이를 먹는 것이고, 이번 달과 태어난 달이 같을 때 생일자보다 오늘의 일자가 지나있는 상태이므로 이미 만 나이를 먹었다고 할 수 있다.

  7. 6번의 경우 외에는 모두 생일이 지나지 않았기 때문에 만 나이를 먹지 않아서 age에서 -1(--age)을 해주면 된다.


마지막의 decrement 증감 연산자를 간과하고 있어서 계속 에러가 났었다.
아래의 이미지 처럼 증감 연산자를 뒤에 사용하게 되면 newNum 변수에 num변수를 할당해서 newNum에 1이 할당 되었고 그 후 num++; 가 실행되어 변수 num이 2가 된다.

let b = 1;
console.log(b--);    // 1
console.log(b);      // 0
// Decrement
let b = 1;
console.log(--b);    // 0
console.log(b);      // 0

증감 연산자를 앞에 사용해야 변수에 제대로 값(-1)이 할당되어 실행되어서도 제 값이 나오는데 내가 쓴 증감 연산자는 if 문에서 값이 리턴된 후에야 실행이 되기 때문에 변수 값이 제대로 나오지 않았다.


참고

0개의 댓글