두 타임스탬프 간의 시간 차이를 구하려면 아래 코드를 실행해 보세요. 이 예제에서는 두 날짜 객체의 차이를 밀리초 단위로 계산한 뒤, 이를 1000으로 나누어 초 단위 값으로 변환합니다. 그런 다음 해당 값을 활용해 두 타임스탬프 사이의 총 일수, 시간, 분, 초를 각각 구하는 방법을 살펴봅니다.
핵심 원리
JavaScript에서 Date 객체끼리 빼기 연산을 하면 두 시점 사이의 차이가 밀리초(ms) 단위 숫자로 반환됩니다. 따라서 Math.abs(date1 - date2) / 1000처럼 1000으로 나누면 초 단위의 시간 차이를 얻을 수 있습니다. 이후 다음과 같은 기준으로 변환합니다.
- 1일 = 86400초
- 1시간 = 3600초
- 1분 = 60초
예제
<html>
<head>
<title>JavaScript Dates</title>
</head>
<body>
<script>
var date1, date2;
date1 = new Date( "Jan 1, 2018 11:10:05" );
document.write(""+date1);
date2 = new Date( "Jan 1, 2018 08:15:10" );
document.write("<br>"+date2);
// 두 날짜의 차이를 밀리초로 구한 뒤 1000으로 나누어 초 단위로 변환
var res = Math.abs(date1 - date2) / 1000;
// 두 날짜 사이의 총 일수 구하기
var days = Math.floor(res / 86400);
document.write("<br>Difference (Days): "+days);
// 시간 구하기
var hours = Math.floor(res / 3600) % 24;
document.write("<br>Difference (Hours): "+hours);
// 분 구하기
var minutes = Math.floor(res / 60) % 60;
document.write("<br>Difference (Minutes): "+minutes);
// 초 구하기
var seconds = res % 60;
document.write("<br>Difference (Seconds): "+seconds);
</script>
</body>
</html>출력 결과
Mon Jan 01 2018 11:10:05 GMT+0530 (India Standard Time) Mon Jan 01 2018 08:15:10 GMT+0530 (India Standard Time) Difference (Days): 0 Difference (Hours): 2 Difference (Minutes): 54 Difference (Seconds): 55
코드 설명
Math.abs()를 사용하면 두 날짜의 순서와 관계없이 항상 양수인 시간 차이를 얻을 수 있습니다. Math.floor()는 나눗셈 결과에서 소수점 이하를 버려 정수 단위의 일, 시간, 분을 구할 때 사용되며, %(나머지 연산자)를 활용해 상위 단위를 제외한 나머지 값을 계산합니다.