getWesternAge 함수를 구현하기
- 이 함수는 birthday 라는 인자를 받는다.
- 이 birthday 는 Date 객체이다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 한다.
- birthday 는 string이 아닌 Date 객체이다.
- 예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이
1990-03-21T00:45:06.562Z
으로 같다면 리턴 값은 30 이 되어야 한다.
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'))
오늘 날짜 객체 생성 하는 코드인 new Date()
생성자를 today
라는 변수에 담아준다. birthday는 Date 객체 형태로 들어오기 때문에 이 역시 bday
라는 변수에 담아준다.
우리가 계산기로 2021-1997을 하게 되면 만 나이를 구할 수 있듯이 올해 년도에서 태어난 년도를 뺀 today.getFullYear() - bday.getFullYear()
값을 age
라는 변수에 할당해준다.
getMonth
메서드는, 항상 현재 달보다 1 작은 값을 반환 하므로 주의해야한다. 그러므로 달을 구하는 코드에는 각각 +1 을 해줘야 한다. 그리고 각각의 값에 thisMonth
와 bdayMonth
변수를 할당해준다.
이번 달과 태어난 달을 비교하여 if 문에서 사용해주어야 하니 이번 달에서 태어난 달을 뺀 thisMonth - bdayMonth
값을 month
라는 변수에 할당해준다.
오늘 일자와 태어난 일자를 비교하여 if 문에서 사용해주어야 하니 오늘 일자에서 태어난 일자를 뺀 today.getDate() - bday.getDate()
값을 day
라는 변수에 할당해준다.
if 문의 조건으로 생일이 지났을 때 만 나이를 리턴 해주도록 조건식을 짜준다
month > 0
의 의미는 이번 달에서 태어난 달을 뺀 것이 0 보다 크다는 의미이다. 예를 들어 이번 달이 11월인데 태어난 달이 10월이라면 나는 벌써 만 나이가 지난 것이다.
month > 0
이거나 (or (||)) (month === 0 && day >= 0)
의 의미는 이번 달과 태어난 달이 같다면 태어난 일자가 0보다 같거나 크다는 것이다. 이는 태어난 달과 태어난 일자가 모두 같으면 그 날은 생일이므로 만 나이를 먹는 것이고, 이번 달과 태어난 달이 같을 때 생일자보다 오늘의 일자가 지나있는 상태이므로 이미 만 나이를 먹었다고 할 수 있다.
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 문에서 값이 리턴된 후에야 실행이 되기 때문에 변수 값이 제대로 나오지 않았다.