WEB front-end/Javascript

날짜 함수 활용...

겸둥이곰 2022. 6. 22. 17:17
반응형

오늘해야 할 일은 로그인 아이디별로 설정한 로그인/로그아웃 시간에 따라 

 

  1. 로그아웃 설정 시간 30분 전에 사용자에게 미리 알림 주기
  2. 로그아웃 시간이 되면 로그아웃 시키기

현재 사용중인 프로그램에 자동 로그아웃 기능이 없고 , 다만 로그인 시에 오전 8시 ~ 오후 9시 에만 로그인 가능 하도록 되어 있다. 

 

즉, 로그인을 했다면.. 오후 9시 이후라도.. 로그아웃 하지 않으면 무한 사용 가능한 상황.. 

이런걸 애려라고 할수는 없으나.. 혹시나 모를 보안 사고 방지를 위해 아이디별로 로그인/로그아웃 시간을 설정을 해 놓고..

 

30분 전에 미리 알림을 주고.. 시간이 되면 로그아웃이 되게 해 달라는 클라이언트의 요청... 

 

getDate() 함수를 이용하면 날짜를 핸들링 할수 있다는 것은 누구나 알고 있지만... 

 

30분 전을 어떻게 표현하지?? 

라는 생각을 해 봤다.

 

평소에 getDate() 함수를 사용할 일이 없으니... 

 

일단..

  1. 로그아웃 시간을 가져와서
  2. getDate()로 시간을 생성하고..
  3. 30분을 빼고..
  4. 1분마다 시간 비교

우선 new Date(year, month, day, hours, minutes, seconds, milliseconds) 를 사용해서 . . 로그아웃 시간을 만들었다.

 

const curr_date = new Date();           // 로그아웃 시간을 생성하기 위한 오늘 날짜 생성..
const log_out = "2100";                    // 21시면 로그아웃 (실제는 DB에서 가져온 값을 넣어줌)

// 로그아웃 되는 시간 생성 
const log_out_time = new Date(curr.getFullYear(), curr.getMonth(), curr.getDate(), log_out.substring(0, 2), log_out.substring(2, 3));     

// 30분 전에 알람을 줘야 하므로 로그아웃 시간에서 30분을 뺀다
log_out_time.setMinutes(log_out_time.getMinutes() - 30);    
const logout_noti_hours = log_out_time.getHours().toString().padStart(2, "0");          // 로그아웃 시간
const logout_noti_minutes = log_out_time.getMinutes().toString().padStart(2, "0");      // 로그아웃 분
const noti_log_out = String(logout_noti_hours) + String(logout_noti_minutes);           // hhmm 형식으로

// 1분마다 로그아웃 시간 확인
setInterval(()=>{
    const now_date = new Date();     // 현재 시간 생성
    // hhmm 형식으로 변경 
    const now_time = String(now_date.getHours().toString().padStart(2, "0")) +   
                                 String(now_date.getMinutes().toString().padStart(2, "0"));   
    let isNotice = true;        // 알림은 한번만 줄것이므로 이 플래그가 true 인 경우 노티를 주고 값을 false로 변경

    // 로그아웃 30분전 && 아직 알림을 하지 안았으면..
    if (Number(now_time) >= Number(noti_log_out) && isNotice){      
        isNotice = false;               // 한번만 알림을 주고 다시 주지 않는다.
        alert("안녕하세요~\n30분뒤에 로그아웃 될 예정입니다. \n하시던 작업을 마무리 해 주세요~");
    }

    if (Number(now_time) >= Number(log_out)){        // 로그아웃 시간이 되면 로그아웃
        location.href="/logout.do";
    }
}, 60000);

시간 형식을 hh24mm 형식으로 쉽게 받을수 있을까?? 하고.. 여러곳을 찾아봤지만.. 

 

결국 찾지 못했음 ㅠㅠ

그래도.. 일단 해결은 되었으니.. 만족.. 

 

다음에 시간나면 찾아봐야지.. 

반응형