분류 javascript

JavaScript에서 날짜에 대해 알아야 할 모든 것

컨텐츠 정보

  • 조회 298 (작성일 )

본문

https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript/ 


Timezones 


우리 세계에는 수백 개의 시간대가 있습니다. 자바 스크립트에서는 두 개 - 지역 시간과 UTC (Coordinated Universal Time) 에만 신경을 썼습니다.


  • Local time은 컴퓨터가 있는 시간대를 나타냅니다.
  • UTC는 실제로 그리니치 표준시 (GMT)와 동의어입니다.


기본적으로 JavaScript의 거의 모든 날짜 메소드 (하나 제외)는 현지 시간으로 날짜/시간을 제공합니다. UTC를 지정하면 UTC만 받습니다.


이를 통해 날짜를 만드는 방법에 대해 이야기 할 수 있습니다.


날짜 만들기 


new Date()를 사용하여 날짜를 만들 수 있습니다. new Date()를 사용하는 방법에는 네 가지가 있습니다.


날짜 문자열(date-string) 사용 

날짜 인수(date arguments) 사용

타임 스탬프(timestamp) 사용

인수 없음 (no arguments)


날짜 문자열 메소드 (date-string method) 


date-string method에서는 날짜 문자열을 new Date로 전달하여 날짜를 만듭니다.


new Date('1988-03-21') 


우리는 날짜를 쓸 때 날짜 문자열 방법을 사용합니다. 우리가 일상 생활에서 날짜 문자열을 사용했기 때문에 자연스럽습니다.


제가 2018-03-21을 쓰는 경우, 2018 년 3 월 21 일에 그것을 추론하는데 문제가 없습니다.

JavaScript에서 날짜 문자열을 사용하려면 전 세계적으로 허용되는 형식을 사용해야 합니다. 이러한 형식 중 하나는 ISO 8601 확장 형식입니다.


// ISO 8601 Extended format `YYYY-MM-DDTHH:mm:ss:sssZ` 


값의 의미는 다음과 같습니다.


  • YYYY : 4 자리 연도
  • MM : 2 자리 월 (1 월은 01, 12 월은 12)
  • DD : 2 자리 날짜 (0 ~ 31)
  • - : 날짜 구분 기호
  • T : 시간의 시작을 나타냅니다.
  • HH : 24 자리 시간 (0 ~ 23)
  • mm : 분 (0-59)
  • ss : 초 (0-59)
  • sss : 밀리 초 (0 - 999)
  • :: 시간 구분 기호
  • Z : Z가 있으면 날짜가 UTC로 설정됩니다. Z가 없으면 현지 시간(Local Time)입니다. (시간이 주어진 경우에만 적용됩니다.)


날짜를 만들 때 시간, 분, 초 및 밀리 초는 선택 사항입니다. 따라서 2019 년 6 월 11 일의 날짜를 만들려면 다음과 같이 작성할 수 있습니다.


new Date('2019-06-11') 


여기서 특별한 주의를 기울이십시오. 날짜 문자열로 날짜를 만드는 데는 큰 문제가 있습니다. 이 날짜에 console.log를 사용하면 문제를 발견 할 수 있습니다.


GMT보다 뒤처진 지역에 살면 6 월 10 일이 되는 것을 알 수 있습니다.


GMT보다 앞서있는 지역에 살면 6 월 11 일이 되는 것을 알 수 있습니다.


이는 날짜 문자열 방법이 고유 한 동작을 하기 때문에 발생합니다. (시간을 지정하지 않고) 날짜를 작성하면 UTC로 설정된 날짜를 얻게 됩니다.


위의 시나리오에서 새 날짜 ( '2019-06-11')를 작성하면 실제로는 2019 년 6 월 11 일 12 am UTC라는 날짜가 작성됩니다. GMT 뒤에서 사는 사람들은 6 월 11 일 대신에 6 월 10 일을 받는 이유입니다.


날짜 문자열 방법으로 현지 시간으로 날짜를 만들려면 시간을 포함 시켜야 합니다. 시간을 포함 시키면 HH와 mm을 최소한 작성해야 합니다 (또는 Chrome에서 잘못된 날짜를 반환 함).


new Date('2019-06-11T00:00') 


날짜 문자열을 사용하는 전체 현지 시간 대 UTC 일은 잡기가 어려운 오류의 원인 일 수 있습니다. 따라서 날짜 문자열을 사용하여 날짜를 만들지 않는 것이 좋습니다.


(그런데 MDN은 브라우저가 날짜 문자열을 다르게 구문 분석 할 수 있기 때문에 날짜 문자열 접근 방식에 대해 경고합니다).


mdn.png 


MDN은 날짜 문자열로 날짜를 생성하지 않도록 권장합니다.


날짜를 작성하려면 인수 또는 timestamps을 사용하십시오.


인수를 사용하여 날짜 만들기 


최대 7 개의 인수를 전달하여 날짜 / 시간을 만들 수 있습니다.


  • 연도 : 4 자리 연도.
  • Month : 해의 달 (0-11). 월은 인덱스가 제로입니다. 생략하면 기본값은 0입니다.
  • 일 : 달의 일 (1-31). 생략하면 기본값은 1입니다.
  • 시간 : 오늘의 시간 (0-23). 생략하면 기본값은 0입니다.
  • 분 : 분 (0-59). 생략하면 기본값은 0입니다.
  • 초 : 초 (0-59). 생략하면 기본값은 0입니다.
  • 밀리 초 : 밀리 초 (0-999). 생략하면 기본값은 0입니다.

// 2019년 6월 11일, 5:23:59am, Local Time new Date(2019, 5, 11, 5, 23, 59) 


많은 개발자 (스스로 포함)는 복잡한 것처럼 보이기 때문에 인수 접근을 피합니다. 그러나 실제로는 아주 간단합니다.


왼쪽에서 오른쪽으로 숫자를 읽으십시오. 왼쪽에서 오른쪽으로 갈수록, 감소하는 크기로 값을 삽입합니다 : 년, 월, 일,시, 분, 초 및 밀리 초.


new Date(2017, 3, 22, 5, 23, 50) // 왼쪽 - 오른쪽 수식을 따르면 이 날짜를 쉽게 읽을 수 있습니다. // Year: 2017, // Month: 4월 (월이 0으로 색인되기 때문에) // Date: 22 // Hours: 05 // Minutes: 23 // Seconds: 50 



Date와 가장 문제가 되는 부분은 Month 값이 1 월 === 0, 2 월 === 1, 3 월 === 2 등과 같이 0으로 인덱싱 된다는 것입니다.


자바 스크립트에서 달이 0으로 색인 된 이유를 알 수는 없지만 그렇습니다. 1 월이 1이 되어야 하는 이유 (0이 아닌)에 대해 논하기보다는 JavaScript에서 0을 색인하는 것이 더 좋습니다.

이 사실을 받아들이면 날짜가 훨씬 쉽게 작동합니다.


다음은 자신을 익숙하게 할 수 있는 몇 가지 예입니다.


// 1988 년 3 월 21 일 오전 12시, 현지 시간 new Date(1988, 2, 21) // 2019 년 12 월 25 일, 오전 8시, 현지 시간 new Date(2019, 11, 25, 8) // 2023 년 11 월 6 일 2:20 am, 현지 시간 new Date(2023, 10, 6, 2, 20) // 2019 년 6 월 11 일 5:23:59 am, 현지 시간 new Date(2019, 5, 11, 5, 23, 59) 


인수로 생성 된 날짜는 모두 현지 시간입니까?

이는 인수 사용의 특혜 중 하나입니다. 현지 시간과 UTC를 혼동하지 마십시오.


UTC가 필요한 경우 다음과 같은 방법으로 UTC로 날짜를 만듭니다.


// 2019 년 6 월 11 일, 오전 12시, UTC. new Date(Date.UTC(2019, 5, 11)) 


타임 스탬프를 이용한 날짜 만들기 


자바 스크립트에서 타임 스탬프는 1970 년 1 월 1 일 (1970 년 1 월 1 일은 유닉스 에포크 타임이라고도 함) 이후로 경과 된 밀리 초입니다.

일반적으로 서로 다른 날짜를 비교할 때