블로그는 나의 힘!
[ Programing ]/Algorithm2022. 4. 21. 22:15

# 조건 : 
1. 기간 있음.
     StartDate : 2022.04.10.     EndDate : 2022.04.25.
     MySQL : tmStartDate = UNIX_TIMESTAMP(startDate)    tmEndDate = UNIX_TIMESTAMP(endDate)

2. 초기화로 정해진 주차가 있음.
     EX) 월요일  (0:월 ~ 6:일)

3. 초기화로 정해진 시간이 있음.
     EX) 10 (0~23)

4. 상수.
     TIME_MINUTE = 60
     TIME_HOUR = TIME_MINUTE * 60
     TIME_DAY = TIME_HOUR * 24      // 86400
     TIME_WEEK = TIME_DAY * 7

5. 그 외.
     1주는 7일
     하루는 86400 (초)
     요일은 0:월 ~ 6:일
     시간은 0 ~ 23
     UNIX_TIMESTAMP -> 1970.01.01 이후 값. 초로 계산된 시간.
                                2022.04.10. Hour(9) -> 1649548800



# 알고리즘 : 
     // [ 허수 Day 계산 ]
     // 정해진 주차(/7) 계산으로 초기화 하기 위해. 시작 주차 차/가산 허수Day 계산.
     ( StartDate_요일 < 초기화_요일 ) 이라면, 
          허수Day_초 = 86400 * ( 7 - (초기화_요일 - StartDate_요일) )
     ( StartDate_요일 > 초기화_요일 ) 이라면, 
          허수Day_초 = 86400 * ( 7 - (StartDate_요일 - 초기화_요일) )

     // [ 초기화 주차 계산 ]
     // EX) StartDate 요일이 일요일. 초기화 월요일 라면, 
     // -> 주차 계산(/7) 위해 : 일요일 -6 Day(허수) = 월요일로 설정.
     MadeStartDate_초 = StartDate_초 - 허수Day_초

     // [ 초기화 시간 체크 ]
     // 초기화 시간에 도달 하지 않았다면 주차 계산(/7) 초기화 안되도록 +1 Day(허수) 가산.
     (현재_요일 == 초기화_요일) 이고, 
     (현재_시간 < 초기화_시간) 이라면, 
          MadeStartDate_초 = MadeStartDate_초 + 86400 

     // [ 남아있는 Day 계산 ]
     남은Day_초 = 현재_일_초 - MadeStartDate_초
     남은Day = 남은Day_초 / TIME_DAY

     // [ 주차 계산 ]
    진행_주차 = ( 남은Day / 7 ) + 1

 

Posted by Mister_Q