날짜 차이(일수) 계산하기

2016. 8. 10. 16:50[개발] 지식/JavaScript

작업 내용 중 업데이트 된 날짜가 오늘로부터 2주 내에 있을 경우에만 'new' 아이콘을 보여줘야하는 것이 있었다.


하다보니 Date 객체와 관련된 계산이 혼란스럽게 느껴졌다.

이전에 확실히 해두지 않고 넘어간 부분은 언젠가 다시 부딪힐 날이 반드시 오는 것 같다.


기타 부수적은 부분은 빼고

오늘로부터 기준날짜까지의 '일수'를 계산하는 방법을 알아보자



1) 기준날짜 설정


var  updDate = new Date(year,month,day);  // 기준 날짜
var today = new Date();  // 오늘 날짜


먼저 기준날짜를 설정한다. 

생성자의 파라미터인 year, month, day는 해당하는 값이 있다고 가정하자.

오늘날짜는 그냥 기본 생성자를 호출해서 리턴받는다.



2) Date 연산



var currDay = 24 * 60 * 60 * 1000;// 시 * 분 * 초 * 밀리세컨
var difference =  Math.floor( (today - updDate) / currDay );

if(difference < 14){
      // 미리 icon을 배치 해놓은, 그리고 숨겨진 태그를 show 한다.
}

Date객체는 밀리세컨 단위까지 계산이 가능하다.

따라서 today - updDate를 할 경우 오늘로부터 기준날짜까지의 밀리세컨이 계산된다.


하지만 우리가 구하고자 하는건 '초'가 아닌 '일' 즉 일수이다.

따라서 시 * 분 * 초 * 밀리세컨인 24 * 50 * 60 * 1000을 나누면 일 수를 구할 수 있다.

마지막으로 Math 클래스의 floor를 호출하여 소숫점을 잘라내 버린다.




# 의문점

1) Date 객체간의 뺄셈의 결과에 currDay를 나누는 것과 today/currDay - updDate/currDay를 하는 것의 차이가 존재하는가? 단순히 등식을 수학적으로보면 차이가 없겠으나, 실제로 각각을 나누고 뺀 경우 차이가 발생했다.

조금 더 살펴봤더니, 

today 객체(8월 10일 00시00분00초) 에 currDay를 나누고 소숫점을  버린 결과와

updDate 객체 (8월 10일 15시 31분 00초)에 currDay를 나누고 소숫점을 버린 결과가 달랐다. 

즉 오늘 날짜와 업데이트 날자가 8월 10일로 같았는데 그 차이는 1일로 계산되었다.

왜지... 00시 00분 00초는 다음 날로 계산되는걸까?


2) updDate를 생성할 때 month에 -1을 해줘야 한다.

--> 자바스크립트에서는 month가 0부터 시작한다 ㅎㅎ



<