유닉스 타임스탬프는 1970년 1월 1일 0시(GMT 기준)부터 지금까지 시각을 초로 환산한 놈이다. 각종 시간 수치의 기본형으로 활용하기 편하다. GMT 기준으로 시간대 상관없이 유일한 숫자를 가지기 때문이다. 다양한 형태로 변환하기도 편하다.
다음 함수를 참고하면 된다.
fetchUnixTimestamp = function() {
return Math.floor((new Date()).getTime() / 1000);
}
// 사용: unixTimestamp = fetchUnixTimestamp();
유닉스 타임스탬프가 10자리라는 가정은 잘못된 가정
자바스크립트에서 유닉스 타임스탬프를 구하려면 Date
객체의 getTime()
메서드를 사용하면 된다. 그런데 이렇게 해서 받는 숫자는 밀리초 단위로 돼 있다. 2023년 현재의 시각을 구하면 13자리의 숫자를 돌려 준다. 초 단위로 바꾸면 10자리다.
그런데 염두에 둬야 하는 함정이 있다. 처음에 인터넷 어딘가에서 발견한 함수는 이 유닉스 타임스탬프 밀리초 13자리 숫자를 문자열로 바꾼 후 앞의 10자리를 끊는 형태였다. 아래 코드다.
parseInt(new Date().getTime().toString().substring(0, 10));
이 코드는 Date
객체가 리턴하는 유닉스 타임스탬프 밀리초가 13자리이므로 초를 얻으려면 앞의 10자리를 끊어서 사용하면 된다는 전제 하에 짜여져 있다. 나도 맨 처음엔 위 코드를 사용하고 소개했다.
그런데 아즈키님이 댓글로 문제를 지적해 주셨다. 위 코드는 과거 날짜, 즉 밀리초의 자릿수가 13자리 미만이었던 날짜에 대해서 틀린 결과를 내놓는다는 것이다.
실제로 유닉스 타임스탬프 밀리초가 13자리인 날짜의 범위는 2001년 9월 9일 오전 10시 46분 40초(1000000000
초)부터 2286년 11월 21일 오전 2시 46분 39초(9999999999
초)까지다. 이 범위를 넘어서면 유닉스 타임스탬프 밀리초는 12자리 이하 혹은 14자리 이상이 된다. 그러면 앞자리 10자리를 끊는 게 아니라 9자리 혹은 11자리를 끊어야 밀리초를 초로 바꿀 수 있게 된다. 원래 함수는 전제 자체가 틀렸던 것이다.
결론적으로 밀리초를 초로 바꾸는 가장 좋은 방법은 1000으로 나눈 뒤 내림하는 것이다. 지금 소개하고 있는 함수는 그렇게 구현한 것이다.
댓글 남기기