[위코드 No.5] 날짜와 시간

Jetom·2021년 9월 5일
1

Javascript

목록 보기
12/25
post-thumbnail

오늘은 만나이를 계산하는 문제를 풀다 Date에 대해 흥미롭게 찍히는 값이 있어서 겸사겸사 넣으려한다. 😥


문제

  • 이 함수는 birthday 라는 인자를 받습니다.

  • 이 birthday 는 Date 객체 입니다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주세요.
    birthday 는 string이 아닌 Date 객체라는 걸 명심하세요 :)

  • 예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 1990-03-21T00:45:06.562Z라면 리턴 값은 30 이 되어야 합니다.


나름대로의 알고리즘 🧐

  1. 현재 년도를 가져온다.
  2. 새로운 변수에 가져와야할 Date를 할당해준다.(= 태어난 날)
  3. 현재 년도보다 태어난 년도가 크다면 '아직 안태어나셨습니다!'를 출력
  4. 만약 현재 월일보다 태어난 월일이 작다면 (현재 년도 - 태어난 년도) -1하여 만나이를 return (이때는 0보다 작지 않기때문에 false로 다음 조건으로 넘어가게 조건을 만들었다.)

최종 코드 🧚‍♀️

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


코드가 길지만 보는데 어렵지않은 코드이니 천천히 알고리즘을 생각하고 풀면 될것같다 :)

profile
사람이 좋은 인간 리트리버 신혜리입니다🐶

0개의 댓글