자바스크립트

Section 6. 자바스크립트 Date 객체

포칼이 2023. 3. 31. 11:34

Date 객체는 날짜와 시간 관련 기능들을 제공하는 빌트인 객체이다. 

 

I. 생성자 함수

1. 현재 날짜와 시간

const now = new Date();

console.log(typeof now); //object
console.log(now); //Fri Mar 31 2023 11:11:02 GMT+0900 (한국 표준시)
const nowStr = Date()

console.log(typeof nowStr); //string
console.log(nowStr); //Fri Mar 31 2023 11:11:13 GMT+0900 (한국 표준시)

현재 날짜와 시간이 출력되는 것을 알 수 있다.

두개의 출력문을 보면 특징은 다음과 같다.

  • new와 함께 사용하면 인스턴스 객체가 된다.
  • new 없이 사용하면 문자열을 반환한다. - new Date().toString() 과 같다.

2. 밀리초 기준

1970년 1월 1일 자정(UTC, 그리니치 평균시)으로부터 인자로 주어진 밀리초만큼 경과한 시간이다.

여기서 자정은 해당 일 0시 0분 0초를 의미한다.

console.log(
  new Date(0)
); //Thu Jan 01 1970 09:00:00 GMT+0900 (한국 표준시)

console.log(
  new Date(1000 * 60 * 60 * 24 * 365 * 30)
); //Sat Dec 25 1999 09:00:00 GMT+0900 (한국 표준시)

 

3. 단위별 숫자 입력

연, 월 (0부터 시작) 은 필수이다.

일, 시, 분, 초, 밀리초는 옵션이다. 그리고 없을 시에는 0이다.

console.log(
  new Date(2022, 8)
); //Thu Sep 01 2022 00:00:00 GMT+0900 (한국 표준시)

console.log(
  new Date(2022, 8, 20, 14, 35)
); //Tue Sep 20 2022 14:35:00 GMT+0900 (한국 표준시)

console.log(
  new Date(2022, 8, 20, 14, 35, 47, 789)
); //Tue Sep 20 2022 14:35:47 GMT+0900 (한국 표준시)

 

4. dateString

특정 형식의 문자열을 인식 가능하다. 

*하지만 동작이 일관적이지 못하고, 브라우저마다 차이가 존재해서 권장하지 않는다.

 

console.log(
  new Date('August 20, 2022 14:35:47')
); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)

console.log(
  new Date('2022-08-20T14:35:47')
); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)

 

II. 정적 메서드

1. now

연재의 밀리초 숫자값 (앞으로 UTC 1970/1/1 자정부터 경과값을 의미) 반환하는 메서드이다.

console.log(Date.now()); //1680229292824

 

2. parse, UTC

주어진 시간의 밀리초 숫자값을 반환하는 메서드이다.

parse는 dateString, UTC는 단위별 숫자를 받는다.

console.log(
  Date.parse('August 20, 2022 00:00:00 UTC')
); //1660953600000
console.log(
  // 💡 시스템(실행 컴퓨터) 시간이 한국이면 시차 9시간 적용
  Date.parse('August 20, 2022 09:00:00')
); //1660953600000
console.log(
  // ⭐️ 월은 0부터 시작
  Date.UTC(2022, 7, 20, 0, 0, 0)
); //1660953600000

 

III. 인스턴스 메서드

1. toString, toDateString, toTimeString

각각 전체, 날짜만, 시간만 나타내는 문자열을 출력하는 메서드이다. 

시스템(컴퓨터)의 언어 설정별로 다르게 나타난다.

 

const now = new Date();

console.log(
  now.toString()
); //Fri Mar 31 2023 11:24:25 GMT+0900 (한국 표준시)

console.log(
  now.toDateString()
); //Fri Mar 31 2023

console.log(
  now.toTimeString()
); //11:24:25 GMT+0900 (한국 표준시)

 

2. toLocaleString

주어진 언어 코드를 기준으로 표현한 문자열을 반환하는 메서드이다.

인자가 없을 시 시스템의 언어를 적용한다.

const now = new Date();

console.log(
  now.toString()
); //Fri Mar 31 2023 11:25:49 GMT+0900 (한국 표준시)

console.log(
  now.toLocaleString()
); //2023. 3. 31. 오전 11:25:49

console.log(
  now.toLocaleString('ko-KR')
); //2023. 3. 31. 오전 11:25:49

console.log(
  now.toLocaleString('de-DE')
); //31.3.2023, 11:25:49

 

3. 단위별 setter, getter 메서드들

const now = new Date();
console.log(now.toString()); //Fri Mar 31 2023 11:26:51 GMT+0900 (한국 표준시)

for (i of [
  [ '연:', now.getFullYear() ],
  [ '월:', now.getMonth() ], // 0 ~ 11
  [ '일:', now.getDate() ],
  [ '요일:', now.getDay() ], // 0부터 일월화수목금토 
  [ '시:', now.getHours() ],
  [ '분:', now.getMinutes() ],
  [ '초:', now.getSeconds() ],
  [ '밀리초:', now.getMilliseconds() ]
]) {
  console.log(i[0], i[1]);
}

출력문은 다음과 같다.

const now = new Date();
console.log(now.toString()); //Fri Mar 31 2023 11:29:11 GMT+0900 (한국 표준시)

now.setFullYear(2022);
now.setMonth(7);
now.setDate(20);
// 💡 요일은 setter가 없음
now.setHours(14);
now.setMinutes(35);
now.setSeconds(47);
now.setMilliseconds(789);

console.log(now.toString()); //Sat Aug 20 2022 14:35:47 GMT+0900 (한국 표준시)

이것을 활용하는 예시는 다음과 같다.

const now = new Date();

const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const day = '일월화수목금토'[now.getDay()];

console.log(
  `오늘은 ${year}년 ${month}월 ${date}일, ${day}요일입니다.`
);
//오늘은 2023년 3월 31일, 금요일입니다.

 

4. getTime, setTime

밀리초 숫자값을 set하고 get하는 메서드이다. 

const date1 = new Date(2020, 7, 20);
const date1value = date1.getTime();

console.log(date1.toString()); //Thu Aug 20 2020 00:00:00 GMT+0900 (한국 표준시)
console.log(date1value); //1597849200000
const date2 = new Date();

console.log(date2.toString()); //Fri Mar 31 2023 11:31:44 GMT+0900 (한국 표준시)

date2.setTime(date1value);

console.log(date2.toString()); //Thu Aug 20 2020 00:00:00 GMT+0900 (한국 표준시)

 

5. getTimezoneOffset

 시스템의 시간대와 UTC의 시간차를 분 단위로 반환하는 메서드이다.

한국의 경우 9시간 차이가 있다.

console.log(
  new Date().getTimezoneOffset() / 60
); //-9

 

6. toISOString

ISO 8061이란 형식의 문자열을 반환하는 메서드이다.

UTC 기준으로 반환한다.

const now = new Date();

// 시간차 존재
console.log(
  now.toISOString()
); //2023-03-31T02:33:58.705Z

console.log(
  now.toString()
); //Fri Mar 31 2023 11:33:58 GMT+0900 (한국 표준시)

현재시각으로 맞추면 다음과 같다.

const now = new Date();
const timezoneOffset = now.getTimezoneOffset() * 60000;

const isoStr = new Date(now.getTime() - timezoneOffset).toISOString();

console.log(isoStr); //2023-03-31T11:34:32.791Z
console.log(now.toString()); //Fri Mar 31 2023 11:34:32 GMT+0900 (한국 표준시)