3 minute read

Date 객체와 날짜

생성 및 수정 시간 저장, 시간 측정, 현재 날짜 출력하는 용도 등 날짜/시간 관련된 용도로 활용 가능

  • 객체 생성하기

    new Date() 호출 시 새로운 Date 객체 만들어 짐

    • 호출 형태

      • new Date()

        인수 없이 호출 시 현재 날짜와 시간 저장된 Date 객체 반환

      • new Date(miliseconds)

        UTC 기준 1970년 1월 1일 0분 0초에서 milliseconds 후의 시점이 저장된 Date 객체 반환

      • 타임 스탬프

        1970 년의 첫날을 기준으로 흘러간 밀리초를 나타내는 정수

        1970 이전의 날짜에 해당하는 값은 음수

      • new Date(datestring)

        인수가 하나인데 문자열 일 시 문자열 자동으로 구문 분석(parsed)

        Date.parse 에서 사용하는 알고리즘

      • new Date(year, month, date, hours, minutes, seconds, ms)

        주어진 인수를 조합해 만들 수 있는 날짜가 저장된 객체 반환

        첫번째와 두 번째 인수만 필수값

        year 은 반드시 네자리 숫자

        month는 0부터 시작

        date 는 값 없을 시 1로 처리

        hours/minutes/seconds/ms 에 값 없을 시 0으로 처리

  • 날짜 구성요소 얻기

    • getFullYear()

      연도 반환

    • getMonth()

      월 반환

    • getDate()

      일 반환

    • getHours, getMinutes(), getSeconds(), getMilliseconds()

      시, 분, 초, 밀리초 반환

    • getDay()

      요일 반환

      0부터 시작

      0은 일요일

      • 위 메서드 모두 현지 시간 기준 날짜 구성요소 반환

      • UTC

        표준시 기준의 날짜 구성 요소 반환해주는 메서드

        아래 두 메서드는 UTC 기준 메서드 없음

    • getTime()

      주어진 일시에서 타임 스탬프 반환 (밀리초 단위)

    • getTimezoneOffset()

      현지 시간과 표준 시간 차이(분) 반환

  • 날짜 구성요소 설정

    • 메서드

      setFullYear(year, [month], [date])

      setMonth(month, [date])

      setDate(date)

      setHours(hour, [min], [sec], [ms])

      setMinutes(min, [sec], [ms])

      setSeconds(sec, [ms])

      setMilliseconds(ms)

      setTime(milliseconds) (1970년 1월 1일 00:00:00 UTC부터 밀리초 이후를 나타내는 날짜를 설정)

      • UTC

        setTime() 제외한 모든 메서드 표준시에 따라 날짜 구성 요소 설정해줌

      • setHours 와 같은 메서드의 인수에 업슨ㄴ 구성요소는 변경되지 않음

  • 자동 고침

    범위 벗어나는 값을 설정하려고 하면 자동 고침 기능 활성화되며 값 자동 수정

  • Date 객체 숫자로 변경해 시간차 측정

    Date 객체 숫자형으로 변경 시 타임스탬프(date.getTime() 호출 시 반환하는 값) 됨

    밀리초 기준 시차 구하기 가능

  • Date.now()

    Date 객체 만들 지 않고 시차 측정 가능

    • new Date().getTime() 과 차이점

      중간에 Date 객체 만들지 않아서 성능 더 좋음

      가비지 컬렉터 일 덜어줌

  • 벤치마크 테스트

    비교 대상 두고 성능 비교하여 시험하고 평가할 때 쓰임

    date.getTime() 과 마이너스 연산자 적용시 객체 숫자형으로 변환해서 비교 가능

    • 벤치마크

      멀티 프로세스 사용 시 벤치마크 에 CPU 자원 투입이 적을 경우 좋은 벤치마크 아님

      신뢰할 수 있는 벤치마크 테스트는 번갈아 가며 여러번 돌려야 함

      모던 JS 엔진은 아주 많이 실행된 코드인 ‘hot code’ 대상으로 최적화 수행

      단순 비교시 최적화 잘 적용되지 않기 때문에 예열용 벤치 실행시 최적화 개선

      • 세밀한 벤치 마킹

        모던 JS 엔진은 최적화 많이 함

        ‘만들어진 테스트’ 가 ‘실제 사례’ 결과 다를 수 있음

        진지하게 성능 이해 필요 시 JS 엔진 어떻게 동작하는지 공부 필요

  • Date.parse 와 문자열

    문자열에서 날짜 읽어올 수 있음

    문자열 형식 만족할 시 문자열과 대응하는 타임스템프 반환

    조건 맞지 않을 경우 NaN 반환

    Date 객체 이용해서 타임스탬프 만으로 Date 객체 만들기 가능

    • 문자열 형식

      YYYY-MM-DDTHH:mm:ss.sssZ 처럼 생겨야 함

      • YYYY-MM-DD – 날짜(연-월-일)

      • “T” – 구분 기호로 쓰임

      • HH:mm:ss.sss – 시:분:초.밀리초

      • ‘Z’(옵션) – +-hh:mm 형식의 시간대를 나타냄. Z 한 글자인 경우엔 UTC+0을 나타냄

요약

  • Date 객체로 날짜/시간 관련된 기능들 사용 가능

  • 객체 생성은 new Date() 호출

  • 월은 0부터 시작

  • getDay() 로 요일 얻기 가능

  • 타임 스탬프는 1970년 첫날 기준으로 흘러간 밀리초 나타내는 정수

  • new Date(datestring) 알고리즘은 Date.parse 에서 사용하는 알고리즘과 동일

  • Date 로 현지 시간 기준으로 날짜 구성요소 얻기 가능

  • 날짜끼리 뺄 시 두 날짜의 밀리초 차이 반환. (Date 숫자형으로 바뀔 시 타임 스탬프 반환)

  • UTC 기준 메서드도 존재

  • Date 메서드로 날짜 구성요소 설정 가능

  • Date 메서드는 저동 고침으로 범위 벗어나는 값 설정 시 값 자동으로 수정함

  • Date.now() 로 Date 객체 만들 지 않고 시차 측정 가능하며 new Date().getTime() 보다 성능 높음

  • 벤치마크 테스트는 번갈아서 최대한 많이 CPU 자원 활용해야 그나마 정확한 결과값 얻기 가능

  • 모던 JS 엔진은 아주 많이 실행된 코드인 ‘hot code’ 대상으로 최적화 수행

  • Date.parse 로 문자열에서 날짜 읽을 수 있음

Categories: ,

Updated: