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부터 시작한다 ㅎㅎ
'[개발] 지식 > JavaScript' 카테고리의 다른 글
Input 태그에서 숫자(양수,음수)만 입력 받기 - 한글 입력 제한 (1) | 2016.12.23 |
---|---|
javascript(jquery) resize/scroll 이벤트 함수 한번만 실행하기 (0) | 2016.11.24 |
문서 객체 모델 (1) | 2015.01.27 |
브라우저 객체 모델 (0) | 2015.01.27 |
Array객체 메서드 (0) | 2015.01.26 |