[JS] Date class를 사용하여 날짜 및 시간 구하기

HK_An·2022년 5월 24일
1
post-thumbnail

들어가며

Javascript에서 시간에 관련하여 많이 사용하는 클래스가 Date입니다.
Date 클래스에는 여러 함수가 있지만, 그중 Date.now()를 이용하면 1970년 1월 1일부터 현재까지의 지난 시간의 millisecond를 구할 수 있습니다.

 이것과 관련하여 왜 1970년 1월 1일이 기준시간인지 문득 궁금해져서 찾아보았는데

1970년도 초반에 개발된 유닉스의 초기 모델은 시스템 시간을 1/60초 간격으로 측정하였고 그로 인하여 32비트 부호가 없는 정수로는 약 829일 미만을 나타낼 수 있었다고 합니다. 그렇기 때문에 최초 시간을 최근의 과거로 정의하여야 했는데 그 날짜가 1971/1/1이었다고 합니다. 그 후 시간이 지나며 1/60초 간격으로 측정하던 시스템 시간을 1초 간격으로 증가시켰고, 그 덕분에 최대로 32비트 부호 없는 정수로 계산할 수 있던 날짜가 829일에서 약 136년으로 늘어났다고 합니다. 그로 인해 더 이상 최초 시간을 최근의 과거로 정의하는 것이 의미가 없어져 비교적 온전한 날짜인 1970/1/1로 정의하였다고 합니다.

참고로 1초는 1000ms, 1분은 60,000ms, 1시간은 36,000,000ms입니다.

 

예제로 알아보기

1. 현재 시간 millisecond 구하기

let now = Date.now();
console.log(now); // 결과-> 1653396678910

2. 실생활에 사용할 수 있는 시간으로 변환하기

위의 값으로는 서버 혹은 DB에 저장하거나 연산에는 유리하다는 장점이 있지만, 사람이 알아보기에는 매우 어렵다는 단점이 있습니다.

2.1. 간단하게 사용하는 법

아래 방법을 통하면 milliseconds를 우리가 사용하는 시간 단위로 변환할 수도 있습니다.

let then = Date.now();
let defaultType = new Date(then); // new Date(); 처럼 인수 없이 호출하면 현재시간
console.log(defaultType); // 결과-> Tue May 24 2022 21:51:18 GMT+0900 (한국 표준시)

2.2 보기좋게 사용하는 법

혹은 각 값을 변수에 저장하여 특정 타입으로 만들면 좀 더 보기좋게 사용할 수도 있습니다.

const now = Date.now();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const hour = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
const mills = now.getMilliseconds();

const getNowOrganized = () => `${year}/${month}/${date} ${hour}:${minutes}:${seconds}.${mills}`

console.log(getNowOrganized()); // 결과-> '2022/5/24 21:51:18.910'

3. 특정 시간의 millisecond 구하기

오늘 특정 시점의 millisecond를 구하는 방법은
현재의 밀리초를 구한다음, 현재의 시, 분, 초 각각의 밀리초를 빼면 구할 수 있습니다.

// 오늘의 00시 00분 00초를 구한다
const dateTime = {
    year: 2022,
    month: 4,
    date: 24,
    hour: 23,
    min: 59,
    sec: 57,
    mill: 800
}

const getDateAndTimeAsMills = (data) => {
    const now = new Date();
    now.setFullYear(data.year, data.month, data.date);
    now.setHours(data.hour, data.min, data.sec, data.mill);
    return now.getTime();
}

let mills = getDateAndTimeAsMills(dateTime);
let date = new Date(mills);
console.log(mills); // 결과-> 1653404397800
console.log(date); // 결과-> Tue May 24 2022 23:59:57 GMT+0900 (한국 표준시)

0개의 댓글