tech.junha.kr

노트/JavaScript

Date

작성

  • GMT(=UTC): 세계적으로 사용되는 시간 표준 중 하나
  • 한국 시간: UTC+09:00

Date 객체

  • 인자로 받은 UTC 정보로, Date 객체 반환
  • 인자를 비어두면, 현재 시간을 기준으로 생성
new Date();
// Mon Sep 05 2022 16:05:29 GMT+0900 (동부 인도네시아 시간)

new Date(1662361847416);
// Mon Sep 05 2022 16:10:47 GMT+0900 (동부 인도네시아 시간)

Date.now()

  • 1970년 1월 1일 00:00:00 UTC 이후부터 현재까지 경과한 밀리초를 반환
Date.now()
// 1682559808081

Date의 다양한 메소드 활용하기

const Clock = {
  getCurrentTime: function(){
    this.getTime(new Date());
  },
  getTime: function(date) {
    if (date instanceof Date) {
      const yy = date.getFullYear();
      const mm = date.getMonth() + 1;
      const dd = date.getDate();
      const hh = date.getHours();
      const mmm = date.getMinutes();
      const ss = date.getSeconds();
      const clock = `현재 시간은 ${yy}년 ${mm}월 ${dd}일 ${hh}시 ${mmm}분 ${ss}초 입니다.`;
      return this.log(clock);
    } else {
      return this.log('현재 시간을 구할 수 없습니다.');
    }
  },
  log: console.log
};
Clock.getCurrentTime();
//'현재 시간은 2022년 9월 5일 16시 19분 58초 입니다.'

타임 스탬프 예시

const TimeMap = (() => {
  let min = 60;
  let hour = min * 60;
  let day = hour * 24;
  let week = day * 7;
  let month = week * 4;
  let year = month * 12;
  return { min, hour, day, week, month, year };
})();

const TimeTextMap = {
  [TimeMap.min]: '분',
  [TimeMap.hour]: '시간',
  [TimeMap.day]: '일',
  [TimeMap.week]: '주',
  [TimeMap.month]: '개월',
  [TimeMap.year]: '년',
};

function createTimeText(time, standard, suffix) {
  return `${Math.floor(time / standard)}${suffix} 전`;
}

const RelativeTime = {
  diff: (date) => {
    const seconds = (new Date() - date) / 1000;
    Object.entries(TimeMap).reduce((text, [time, value]) => {
      if (seconds >= value) {
        return createTimeText(seconds, value, TimeTextMap[value]);
      }
      return text;
    }, '방금 전');
  },
};

export default RelativeTime;