Recent Posts
Recent Comments
Link
Today
Total
05-20 08:40
관리 메뉴

채린씨의 티스토리

[JavaScript] 39. Date 본문

자료구조, 알고리즘/JavaScript 기초 문법

[JavaScript] 39. Date

채린씨 2022. 3. 15. 04:26

* Date

- 표준 built-in 객체로써 날짜와 시간을 위한 속성값(property)와 메서드를 제공하는 개체

- 1970년 1월 1일 00:00:00 UTC(협정 세계시) 기준

 

* Date 생성자

- 생성자 종류: new Date(), new Date(miliseconds), new Date(datestring), new Date(year, month, date, hours, minutes, seconds, ms)

/* 1. new를 이용한 Date 생성 */
let date_now = new Date();
console.log(date_now);
// output: 2022-03-14T17:05:05.890Z (현재 년, 월, 일, 시, 분, 초, 밀리초)
// KST(Korea Standard Time)는 UTC에 9시간을 더하면 됨
// => 즉, 현재 시간은 우리나라 기준으로 2022-03-15 02:05:05.890Z
console.log(typeof date_now); // output: object

/* 2. new 없이 Date 생성 (문자열이 생성됨) */
let date_now_str = Date();
console.log(date_now_str);
// output: Tue Mar 15 2022 02:06:17 GMT+0900 (Korean Standard Time)
console.log(typeof date_now_str); // output: string

/* 3. parameter에 number를 넣어서 Date 생성
=> 1970년 1월 1일 UTC(협정 세계시) 자정에서 parameter만큼의 밀리초가 지난 Date 생성 */
let date_ms_1 = new Date(0);
console.log(date_ms_1); // output: 1970-01-01T00:00:00.000Z
let date_ms_2 = new Date(24 * 3600 * 1000); // 하루만큼의 밀리초를 parameter로 넣어줌
console.log(date_ms_2); // output: 1970-01-02T00:00:00.000Z

/* 4. parameter에 string을 넣어서 Date 생성 */
let date_str = new Date("2020-01-01");
console.log(date_str); // output: 2020-01-01T00:00:00.000Z

/* 5. parameter에 연, 원, 일, 시, 분, 초, 밀리초를 넣어서 Date 생성
=> 이 때, 0은 1월, 1은 2월 ... 11은 12월을 의미!!! */
let date_params_1 = new Date(2020, 1, 2, 9, 0, 0, 0);
// 결과로 2020-2-2 09:00:00.000Z가 나오겠지? 라고 예상했지만..
console.log(date_params_1);
// output: 2020-02-02T00:00:00.000Z (UTC는 우리나라 시간 기준으로 9시간을 뺀 것)
let date_params_2 = new Date(Date.UTC(2020, 1, 2, 9, 0, 0, 0));
// UTC 보정 (즉, 내가 입력하는 값이 KST 기준이 아니라 UTC 기준이 됨)
console.log(date_params_2);
// output: 2020-02-02T09:00:00.000Z

 

* 날짜 정보 얻기

- 년/월/일/요일/시/분/초/밀리초 얻기: Date.getFullYear(), Date.getMonth(), Date.getDate(), Date.getDay()Date.getHours(),

Date.getMinutes()Date.getSeconds(), Date.getMilliseconds()

- 1970년 1월 1일 00:00:00 UTC와 주어진 날짜 사이의 경과 시간 (ms): Date.getTime()

- UTC와 현지 시간의 차이 (min): Date.getTimezoneOffset()

let date = new Date();
console.log(date); // output: 2022-03-14T18:22:51.371Z

/* 1. 년/월/일/요일/시/분/초/밀리초 얻기 */
console.log(date.getFullYear()); // output: 2022
console.log(date.getMonth()); // output: 2 (여기서 2는 3월을 의미함!!!)
console.log(date.getDate()); // output: 15
console.log(date.getDay()); // output: 2 (0: 일요일, 1: 월요일, 2: 화요일, ... , 6: 토요일)
console.log(date.getHours()); // output: 3
console.log(date.getMinutes()); // output: 22
console.log(date.getSeconds()); // output: 51
console.log(date.getMilliseconds()); // output: 266
// 이건 또 KST 기준으로 나온단 말이지...

/* 2. 1970년 1월 1일 00:00:00 UTC와 주어진 날짜 사이의 경과 시간 (ms) */
console.log(date.getTime());
// output: 1647282171371 (1970년 1월 1일 00:00:00 UTC를 기준으로 1647282171371ms가 지났음 )

/* 3. UTC와 현지 시간의 차이 (min) */
console.log(date.getTimezoneOffset());
// output: -540 (UTC보다 현지 시간이 540분 앞서 있음)

 

* 날짜 정보 설정

- 년/월/일/시/분/초/밀리초 설정: Date.setFullYear(), Date.setMonth(), Date.setDate(), Date.setHours(), Date.setMinutes(), Date.setSeconds(), Date.setMilliseconds()

let date = new Date();
console.log(date);
// output: 2022-03-14T18:43:29.480Z (UTC 기준 현재 시간)
// => 9시간을 더하면 KST 기준 현재 시간은 2022-03-15 03:43:29.480Z

/* 년 설정 */
date.setFullYear(2020, 1, 2); // 이 때 1은 2월의 의미!!!
// date의 년, 월, 일을 설정 (KST 기준 2020-02-02 03:43:29.480Z => UTC 기준 2020-02-01T18:43:29.480Z)
console.log(date);
// output: 2020-02-01T18:43:29.480Z (date값이 내가 설정한 대로 바뀐것을 확인 (UTC 기준!!!))

/* 월 설정 */
date.setMonth(11); // 이 때 11은 12월의 의미!!!
// date의 월을 설정 (KST 기준 2020-12-02 03:43:29.480Z => UTC 기준 2020-12-01T18:43:29.480Z)
console.log(date); // output: 2020-12-01T18:43:29.480Z

/* 일 설정 */
date.setDate(24);
// date의 일을 설정 (KST 기준 2020-12-24 03:43:29.480Z => UTC 기준 2020-12-23T18:43:29.480Z)
console.log(date); // output: 2020-12-23T18:43:29.480Z
date.setDate(0);
// date의 일을 이전 달의 마지막날로 설정 (KST 기준 2020-11-30 03:43:29.480Z => UTC 기준 2020-11-29T18:43:29.480Z)
console.log(date); // output: 2020-11-29T18:43:29.480Z

/* 시 설정 */
date.setHours(11);
// date의 시를 설정 (KST 기준 2020-11-30 11:43:29.480Z => UTC 기준 2020-11-30T02:43:29.480Z)
console.log(date); // output: 2020-11-30T02:43:29.480Z

/* 분 설정 */
date.setMinutes(59);
// date의 분을 설정 (KST 기준 2020-11-30 11:59:29.480Z => UTC 기준 2020-11-30T02:59:29.480Z)
console.log(date); // output: 2020-11-30T02:59:29.480Z

 

* 문자열 기반 날짜 정보 설정

- "YYYY-MM-DDTHH:mm:ss.sssZ"형태의 문자열을 이용해서 날짜 설정: Date.parse()

- T: 구분 기호

- Z(option): 미설정할 경우 입력된 시간을 로컬 시간으로 인식, 설정할 경우 입력된 시간을 UTC 기준으로 인식

// Z가 없으면 입력된 시간을 로컬 시간으로 인식 => 자동으로 UTC 기준으로 변환
date_1 = new Date(Date.parse("2020-03-02T09:00:00.000"));
console.log(date_1); // output: 2020-03-02T00:00:00.000Z

// Z가 있으면 입력된 시간을 UTC 기준으로 인식
date_2 = new Date(Date.parse("2020-03-02T09:00:00.000Z"));
console.log(date_2); // output: 2020-03-02T09:00:00.000Z

 

* benchmark

- 벤치마크 측정 대상 함수 전후로 시간을 비교하여 알고리즘 성능 측정

// 성능을 비교할 함수 1
function sum(x, y) {
  return x + y;
}

// 성능을 비교할 함수 2
function mul(x, y) {
  return x * y;
}


function benchmark(callback_func) {
  let start = Date.now(); // 성능 측정 시작 시간 저장
  // callback_func를 1000000번 실행
  for (let i = 0; i < 1000000; i++) {
    callback_func(i, i);
  }
  return Date.now() - start; // (성능 측정 종료 시간 - 성능 측정 시작 시간) 반환
}

console.log("Sum: " + benchmark(sum) + "ms"); // Sum: 3ms
console.log("Mul: " + benchmark(mul) + "ms"); // Mul: 15ms

 

 

 

- 9시간을 빼면 날짜가 바뀌어버리는 새벽시간에 실습을 하니까 헷갈려서 머리가 뽀개지는 줄 알았다.. 하지만 덕분에 제대로 이해할 수 있었다! Date에 대한 내용은 어차피 필요한 상황이 정해져 있을 것이고.. 이걸 다 외우기란 불가능하니까 그냥 이해만 하고 넘어갔다가 필요할 때 다시 찾아보면 될 듯..?

 

 

 

'자료구조, 알고리즘 > JavaScript 기초 문법' 카테고리의 다른 글

[JavaScript] 기초 문법 총정리  (0) 2022.03.16
[JavaScript] 40. N차원 Array  (0) 2022.03.15
[JavaScript] 38. Math  (0) 2022.03.14
[JavaScript] 37. Set  (0) 2022.03.14
[JavaScript] 36. Map  (0) 2022.03.14
Comments