JS레플릿 21.날짜와 시간_10.19

송철진·2022년 10월 19일
0

Assignment

미국을 비롯해 전세계 대부분의 나라들이 생일을 기준으로 나이를 계산 합니다. 쉽게 말해 미국은 태어나자마자 0살이고 생일을 지나야 비로소 한 살이 됩니다. 반면에 한국은 태어나자마자 1살이고 연도가 바뀔 때마다 한 살씩 먹습니다. 예를 들어 미국에서는 1995년 9월 12일에 태어났으면 1995년 9월 12일에는 0살이고 1996년 9월 12일이 되야 1살이 됩니다. 그에 비해 한국에서는 1995년 9월 12일에 태어나자마자 1살이고 1996년 1월 1일에 2살이 됩니다. 1살 차이도 크게 생각하는 우리나라 고유의 문화에 비롯한 계산법이 아닌가 추측해 봅니다. 미국이나 다른 나라가 사용하는 나이 계산법은 우리나라에서는 만 나이 라고 하죠.

앞서 말한 만으로 계산한 나이를 구하는 함수인 getWesternAge 함수를 구현해 봅시다.
이 함수는 birthday 라는 인자를 받습니다.
이 birthday 는 Date 객체 입니다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주세요.
birthday 는 string이 아닌 Date 객체라는 걸 명심하세요 :)
예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 다음과 같다면:
1990-03-21T00:45:06.562Z
리턴 값은 30 이 되어야 합니다.

로직 생각하기

  1. 결과값 경우의 수: 1살, 오늘 년도 - 태어난 년도, 오늘 년도 - 태어난 년도 - 1, 태어나지 않음
  2. 변수명 간단하게 매칭하기: 오늘 년도(ty), 오늘 월(tm), 오늘 일(td),
    태어난 년도(ty), 태어난 월(tm), 태어난 일(td)

결과

function getWesternAge(birthday) {
  let today = new Date();
  let ty = today.getFullYear();
  let tm = today.getMonth()+1;
  let td = today.getDate();
  let by = birthday.getFullYear();
  let bm = birthday.getMonth()+1;
  let bd = birthday.getDate();

  if( ty === by && (tm > bm || (tm === bm && td >= bd))){
    return 1;
  }else if( ty > by &&  tm > bm ){
    return ty - by;
  }else if( ty > by && tm === bm && td >= bd ))){
    return ty - by + 1;
  }else{
    return ty - by - 1;
  }
}

console.log(getWesternAge(new Date('1990-03-21T00:45:06.562Z')));

레플릿 테스트는 통과했지만.
시분초까지의 정밀함이 부족하고
자세히 테스트해보면 불완전하고 매우 헷갈린다

Today I Learn

  1. 날짜와 시간에 대한 메소드
  • 날짜 객체를 생성할 때는 다음과 같이 new 연산자 다음에 Date 생성자를 씁니다.
    : new Date()
let arrayDay = ["일", "월", "화", "수", "목", "금", "토"]

console.log("오늘은 " + new Date().getFullYear() + "년 "
             + (new Date().getMonth()+1) + "월 "
             + new Date().getDate() + "일 "
             + arrayDay[new Date().getDay()] + "요일 "
             + new Date().getHours() + "시 "
             + new Date().getMinutes() + "분입니다.");

console.log(new Date('1990-03-21T00:45:06.562Z'));

  1. GMT(Greenwich Mean Time): 컴퓨터 언어에서는 GMT기준으로 시간을 알려줍니다.
  • GMT-0600: GMT기준으로 6시간 빠름
  • GMT+0900 (한국 표준시)
  1. getTime() 메소드와 기준 시간
  • getTime() : 날짜의 밀리초 표현을 반환
  • 기준이 되는 일자: 1970년 1월 1일.

내 이야기
L2스위치의 동기화 Date&Time의 초기값이 1970-01-01 00:00:00 인 것을 종종 볼 수 있었다. 왜 꼭 '1970월 1월 1일'이어야 했나 의문이었는데 제조사가 특정 날짜를 정한게 아니라 유닉스 세계 표준인 것이었다.
참조: https://qa.apthow.com/archives/3401?amp=1

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글