프로그래밍/JavaScript

[JavaScript] Date 객체

jay.den 2019. 8. 30. 16:42
728x90

 

 

Date 생성자는 시간의 특정 지점을 나타내는 Date 객체를 생성합니다. Date 객체는 1970년 1월 1일 UTC(국제표준시) 00:00으로부터 지난 시간을 밀리초로 나타내는 유닉스 타임스탬프를 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
var date1 = new Date('December 17, 1995 03:24:00');
// Sun Dec 17 1995 03:24:00 GMT...
 
var date2 = new Date('1995-12-17T03:24:00');
// Sun Dec 17 1995 03:24:00 GMT...
 
console.log(date1 === date2);
// expected output: false;
 
console.log(date1 - date2);
// expected output: 0
 
 
 
 

 

 

 

Date 객체 초기화

JavaScript Date 객체를 생성하는 법은 new 연산자를 사용하는 것이 유일합니다.

1
let now = new Date();

단순히 Date 객체를 직접 호출했을 때, 반환 값은 Date 객체가 아니라 날짜를 나타낸 문자열입니다. JavaScript는 Date 리터럴 구문이 없습니다.

 

구문

1
2
3
4
new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

Date() 생성자는 네 가지 형태로 사용할 수 있습니다.

매개변수 없음

매개변수를 제공하지 않으면, 현지 시간으로 생성 순간의 날짜와 시간을 나타내는 Date 객체를 생성합니다.

 

유닉스 타임스탬프

value

유닉스 타임스탬프, 즉 1970년 1월 1일 00:00:00 UTC(유닉스 시간)부터의 시간을 밀리초 단위로 표현하되 윤초는 무시한 정숫값. 대부분의 유닉스 타임스탬프 함수는 초 단위까지만 정확함을 유의하세요.

 

타임스탬프 문자열

dateString날짜를 표현하는 문자열값. Date.parse() 메서드가 인식할 수 있는 형식(IETF 호환 RFC 2822 타임스탬프 ISO8601의 한 버전)이어야 합니다

 

-참고 : Date 생성자(와 Date.parse)를 사용해 날짜 문자열에서 시간을 알아내는건 하지 않는 것이 좋습니다. 브라우저 간 차이와 여러 비일관성이 존재하며 RFC 2822 규격 문자열의 지원은 관례일 뿐입니다. ISO 8601 규격 문자열은 시간 정보가 없을 때("1970-01-01" 등) 현지 시간이 아닌 UTC 기준으로 처리합니다.

 

 

개별 날짜 및 시간 구성 요소

적어도 연도와 월이 주어지면, 자신의 구성 요소(연, 월, 일, 시, 분, 초, 밀리초)를 모두 매개변수의 값에서 가져오는 Date 객체를 생성합니다. 누락한 요소에는 가장 낮은 값(day는 1, 나머지는 0)을 사용합니다.

 

year

연도를 나타내는 정숫값. 0부터 99는 1900부터 1999로 처리합니다. 아래 예제를 참고하세요.

monthIndex

월을 나타내는 정숫값. 0은 1월을 나타내고 11은 12월을 나타냅니다.

day Optional

일을 나타내는 정숫값. 기본값은 1입니다.

hours Optional

시를 나타내는 정숫값. 기본값은 0(자정)입니다.

minutes Optional

분을 나타내는 정숫값. 기본값은 0분입니다.

seconds | Optional

초를 나타내는 정숫값. 기본값은 0초입니다.

milliseconds Optional

밀리초를 나타내는 정숫값. 기본값은 0밀리초입니다.

 

 

설명

JavaScript 날짜는 1970년 1월 1일 자정 (UTC)로부터 지난 시간을 밀리초 단위로 나타낸 것입니다. 이 날짜와 시간을 합쳐 유닉스 시간이라고 부릅니다. 유닉스 시간은 컴퓨터로 날짜와 시간을 기록할 때 널리 사용하는 기준점입니다.

 

-참고 : 시간과 날짜는 현시 시간으로 저장된다는 점을 기억하는게 중요합니다. 시간, 날짜, 아니면 각각의 구성 요소를 회수하는 기본 메서드도 현지 시간에서 동작합니다.

 

하루는 86,400,000 밀리초입니다. 타임스탬프 기록에 사용하는 수의 크기를 고려했을 때, Date 객체는 유닉스 시간으로부터 약 ±100,000,000일 (1억일)을 기록할 수 있습니다. 따라서 293,742년이 오면 문제가 발생할 여지가 있습니다.

 

 

날짜 형식과 시간대 변환

날짜를 얻는 방법과 시간대를 바꾸는 메서드는 여럿 있습니다. 그 중 특히 유용한 함수는 날짜 및 시간을 국제 표준 시간인 협정 표준시(UTC)로 반환하는 함수입니다. UTC는 그리니치 시간대라고도 불리는데, 기준 시간대가 영국의 런던과 인근의 그리니치를 지나는 경선이기 때문입니다. 사용자의 장치는 현지 시간을 제공합니다.

 

getDay() setHours()처럼 현지 시간을 기준으로 한 구성요소 읽기 및 쓰기 메서드처럼, 

getUTCDay()  setUTCHours()처럼 UTC를 기준으로 하는 읽기 및 쓰기 메서드도 존재합니다.

 

속성

Date.prototype

Date 객체에 추가 속성을 부여할 수 있습니다.

 

Date.length

Date.length의 값은 7로, 생성자가 받을 수 있는 매개변수의 수입니다. 보통 유용하게 쓸 수 있는 값은 아닙니다.

 

 

메서드

Date.now()

1970년 1월 1일 00:00:00 UTC(유닉스 시간)부터 지난 시간을 밀리초 단위의 숫자 값으로 반환합니다. 윤초는 무시합니다.

Date.parse()

Parses a string representation of a date and returns the number of milliseconds since 1 January, 1970, 00:00:00, UTC.

Date.UTC()

Accepts the same parameters as the longest form of the constructor (i.e. 2 to 7) and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored.

 

 

Example) 

날짜를 지정하는 여러가지 방법

 

1
2
3
4
var today = new Date();
var birthday = new Date("December 17, 1995 03:24:00");
var birthday = new Date(95,11,17);
var birthday = new Date(95,11,17,3,24,0);

두 자리 연도는 1900년대로

In order to create and get dates between the years 0 and 99 the

Date.prototype.setFullYear() and Date.prototype.getFullYear() methods should be used.

 

1
2
3
4
5
6
var date = new Date(981); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
 
// Deprecated method, 98 maps to 1998 here as well
date.setYear(98);           // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
 
date.setFullYear(98);       // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)

 

경과시간 계산

The following examples show how to determine the elapsed time between two JavaScript dates in milliseconds.

 

Due to the differing lengths of days (due to daylight saving changeover), months and years, expressing elapsed time in units greater than hours, minutes and seconds requires addressing a number of issues and should be thoroughly researched before being attempted.

 

1
2
3
4
5
6
7
// Date 객체 사용
var start = Date.now();
 
// 시간이 오래 걸리는 작업을 여기 배치합니다
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // 경과 시간, 밀리초.

 

1
2
3
4
5
6
7
// 내장 메서드 사용
var start = new Date();
 
// 시간이 오래 걸리는 작업을 여기 배치합니다.
doSomethingForALongTime();
var end = new Date();
var elapsed = end.getTime() - start.getTime(); // 경과 시간, 밀리초.

 

1
2
3
4
5
6
7
8
9
10
11
// to test a function and get back its return
function printElapsedTime(fTest) {
  var nStartTime = Date.now(),
      vReturn = fTest(),
      nEndTime = Date.now();
 
  console.log('Elapsed time: ' + String(nEndTime - nStartTime) + ' milliseconds');
  return vReturn;
}
 
var yourFunctionReturn = printElapsedTime(yourFunction);

 

해당 글은 MDN web docs의 내용을 참고하여 작성하였습니다.