오늘은 만나이를 계산하는 문제를 풀다 Date에 대해 흥미롭게 찍히는 값이 있어서 겸사겸사 넣으려한다. 😥
이 함수는 birthday 라는 인자를 받습니다.
이 birthday 는 Date 객체 입니다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주세요.
birthday 는 string이 아닌 Date 객체라는 걸 명심하세요 :)
예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 1990-03-21T00:45:06.562Z라면 리턴 값은 30 이 되어야 합니다.
let born = new Date('2010-06-04T03:24:00');
// let born = new Date(2010, 06, 04);
function getWesternAge(birthday) {
let current = new Date();
let result = 0;
// current : 현재 년월일시간을 나타낸다 (예:2021-09-05T03:05:29.220Z)
// T03:05:29.220Z -> UTC(국제표준시)를 기준으로하며 우리나라는 UTC+09:00이다.
let currentYear = current.getFullYear();
// currentYear : current에서 년을 가져온다 (예: 2021)
console.log(currentYear);
let currentMonth = ('0' + (current.getMonth() + 1)).slice(-2);
// currentYear : current에서 월을 가져온다 (예: 09)
// getMonth와 getDate는 수치값을 반환해 2자리를 맞추려면 0을 붙여 뒤 두자리를 잘라 값을 변환한다. -> 밑에서 더 설명
console.log(currentMonth);
let currentDate = ('0' + current.getDate()).slice(-2);
let currentDay = currentMonth + currentDate;
let currentAll = currentYear + currentMonth + currentDate;
// bornYear : birthday를 매개변수로 받아왔고, born에 대한 Date는 위에서 지정한 후 선언해주었다.
//현재 birthday = born라는 소리
let bornYear = birthday.getFullYear();
let bornMonth = ('0' + (birthday.getMonth() + 1)).slice(-2);
//currnetMonth와 같은 내용
console.log(bornMonth);
let bornDate = ('0' + birthday.getDate()).slice(-2);
let bornDay = bornMonth + bornDate;
let bornAll = bornYear + bornMonth + bornDate;
//문자 - 문자를 했지만 형변환이 되어 300이 찍힌다.
console.log((currentDay - bornDay));
//bornYear가 높을 경우 실수를 했거나 장난일 수 있으니 처음 조건으로 달았다.
if( currentYear < bornYear ) {
result = '아직 안태어나셨습니다!';
} else if((currentDay - bornDay) < 0) {
//0905(현재) - 0604(태어난날)의 결괏값은 301인데 이것은 0보다 크니까 false가 되어 다음 else로 넘어간다.
//이때 0보다 작으면 아직 생일이 지나지않았으므로 최종적으로 현재년도에서 태어난 날 -1하면 만나이가 나온다.
result = (currentYear - bornYear) -1;
} else {
//생일이 지났다면 만나이와 한국 나이가 동일하니 -1를 해줄 필요가 없다.
result = currentYear - bornYear;
}
return result;
}
//born을 인자로 받는다는 것
console.log(getWesternAge(born));
('0' + current.getDate()).slice(-2)
💡 getMonth와 getDate는 수치값을 반환해 2자리를 맞추려면 0을 붙여 뒤 두자리를 잘라 값을 변환한다.
👉 current.getDate()를 했을때 typeof()를 해본다면 number로 자동형변환이 되어있는 상태이다.
이때 '0' +을 해주면 다시 string으로 형변환이 되며, 만약 2월 이라면 그대로 '02'가 출력되지만, 10월이라면 '010'이란 날짜는 없기때문에 -2를 해주어 '10'이 나오게 한다. (-2는 앞에서가 아니라 뒤에서 새로운 문자열을 반환한다.)
👇 이분의 글이 아니였다면 생각하지 못했을것..ㅠㅜㅠㅜ
https://gent.tistory.com/413
코드가 길지만 보는데 어렵지않은 코드이니 천천히 알고리즘을 생각하고 풀면 될것같다 :)