본문 바로가기

관리 메뉴

Javascript 날짜 비교 하기 및 new Date() 크로스 브라우징 본문

Javascript

Javascript 날짜 비교 하기 및 new Date() 크로스 브라우징

SaintsP 2019. 4. 18. 14:29


제가 주로 사용하는 MS-SQL에서는 Date를 "2019-04-18 13:35:40.324" 형식으로 저장합니다. 이 값을 그대로 뷰페이지에 넘겨 처리하다보면 익스플로러나 사파리에서는 정상적으로 인식하지 못하는 경우가 종종 있습니다. 


 


익스나 사파리같은 경우에는 시간을 "2019-04-18T13:35:40.324" 형식으로만 인식하기 때문입니다. 


 


따라서 아래와 같이 파싱해줘야 익스플로러와 사파리에서도 정상적으로 시간 처리를 할 수 있습니다.


 


간단하게 replace로 대체해도 되고, toISOString()이라는 메소드를 사용하여 파싱해도 됩니다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
  <script>
 
    var inDate = "2019-04-15 14:00:00.000";
 
    var afterDate1 = inDate.replace(" ""T");
 
    var afterDate2 = new Date(inDate).toISOString();
 
    var afterDate3 = afterDate1.slice(0,10).replace(/-/g,".");
 
    console.log(inDate + " // " + afterDate1 + " // " + afterDate2 + " // " + afterDate3);
 
  </script>
cs


<결과>


2019-04-15 14:00:00.000 // 2019-04-15T14:00:00.000 // 2019-04-15T05:00:00.000Z // 2019.04.15


 


 


다음은 DB에 저장된 Date를 기준시간(클라이언트 시간 기준 현재 시간 - 일 수)과 비교하여 게시글의 Date가 기준시간보다 최신이면 true, 아니면 false를 반환하는 함수입니다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function jsIsNew(date, isNewDay) {
    
    // 현재 시간 설정
    var nowTime = new Date().getTime();
    
    // 게시글 시간 설정
    date = date.replace(" ""T");
    var inTime = new Date(date).getTime();
    
    // new가 붙을 기준 날짜 설정(day 기준)
    var newTime = nowTime - (86400000 * isNewDay);
    
    // 기준 시간 이후에 등록된 게시글이면 true 반환, 기준 시간 이전에 등록된 게시글면 false 반환
    if(inTime > newTime) {
        return true;
    } else {
        return false;
    }
 
}
cs


 


기본적으로 js에서 날짜 계산은 getTime()을 가지고 합니다. getTime()은 밀리초 단위로 나오고, 하루는 86400000 밀리초 이므로, 현재 시간에서 86400000 * 기준일수만큼 빼서 기준 시간을 설정합니다. 


 


마지막으로 뷰페이지에서 jsIsNew 함수로 게시글의 DB Date와 기준일자를 입력하여 반환값이 true면 NEW를 띄워주면 됩니다. 


 


 


간단하게 끝!



TIP) yyyy-MM-dd HH:mm:ss.SSS 형식을 간단하게 yyyy.MM.dd로 변경하기


1
2
3
var inDate = '2019-04-18 13:35:40.324';
 
var newDateFormat = inDate.slice(0,10).replace(/-/g,".");
cs


Comments