;윤년인지 아닌지 체크해서 2월 마지막 날짜를 리턴하는 함수
;윤년 = 4로 나누어 떨어지고 100으로 나누어 떨어지지 않는 년도 이거나 400으로 나누어서 떨어지는 년도
;윤년이면 29, 윤년이 아니면 28을 리턴함. (2월의 끝 날짜)
CheckLeapMonth(uYear)
{
if(mod(uYear, 4) = 0 && mod(uYear, 100) != 0 || mod(uYear, 400) = 0)
{
return 29 ;true ;윤년임, 29일까지
}
else
{
return 28 ;false
}
}
;연-월-일을 입력하면 1월 1일부터 몇 번째 일인지 계산하는 함수
;1월 1일부터 몇 번째 일인지 계산하는 이유는 일정기간 반복, 주기적으로 반복하는 일정들을 관리하려고 만듬
;eee := DayCount(A_YYYY, A_MM, A_DD)
;2020, 08, 05 기준 : 결과값 218
DayCount(uYear, uMonth, uDay)
{
Output := 0
MonCNT := 1
Loop
{
if(uMonth = MonCNT) ;전 달까지만 합산하고 이번달은 오늘 날짜를 더하기 위해서 루프 종료
break
if(MonCNT = 1 || MonCNT = 3 || MonCNT = 5 || MonCNT = 7 || MonCNT = 8 || MonCNT = 10 || MonCNT = 12)
Output := Output + 31
else if(MonCNT = 4 || MonCNT = 6 || MonCNT = 9 || MonCNT = 11)
Output := Output + 30
else if(MonCNT = 2)
Output := Output + CheckLeapMonth(uYear)
MonCNT++
}
Output := Output + uDay
return Output
}
;입력받은 총 일수를 '연-월-일'로 표현하는 함수
;uDate := DayReFormat(2020, 218, "-")
;결과값 2020-08-05
DayReFormat(uYear, Var, Separator)
{
uMonth := 1
uDay := 0 ;마지막 일 수를 바로 대입하기 때문에 0으로 초기화
MonthLastDay := 0
MonCNT := 1
Loop
{
;각 달의 마지막 일 수를 구하고
if(MonCNT = 1 || MonCNT = 3 || MonCNT = 5 || MonCNT = 7 || MonCNT = 8 || MonCNT = 10 || MonCNT = 12)
MonthLastDay := 31
else if(MonCNT = 4 || MonCNT = 6 || MonCNT = 9 || MonCNT = 11)
MonthLastDay := 30
else if(MonCNT = 2)
MonthLastDay := CheckLeapMonth(uYear)
if(Var > MonthLastDay) ;월, 일 수 만큼 더하고, 총일수는 빼주고
{
uMonth++
if(uMonth > 12) ;12월이 넘어가면 년을 추가하고 월을 1로 바꿔준다.
{
uYear := uYear + 1
uMonth := 1
}
Var := Var - MonthLastDay
}
else ; 총일수가 더 적으면 그냥 날짜에 더해주고 루프를 빠져나온다.
{
uDay := Var
break
}
MonCNT++
}
;Output := uYear . Separator . uMonth . Separator . uDay ;연-월-일 형식을 만들어서 리턴
Output := uYear . Separator . FormatChange("num", uMonth) . Separator . FormatChange("num", uDay) ;연-월-일 형식을 만들어서 리턴
return Output
}
;00~09까지 문자로 된 숫자들을 1자리 숫자 0~9로 만들고, 0~9 1자리 숫자들을 00~09 2자리 문자형식의 숫자로 만드는 함수
;FormatChange("str", "08") ;결곽값 8
;FormatChange("num", 5) ;결과값 05
FormatChange(InputType, Var)
{
if(InputType = "str")
{
StringLeft, tempVar, Var, 1 ;앞자리가 0인지 확인하기 위해서 앞자리 추출
if(tempVar = "0")
StringMid, OutputVar, Var, 2, 1 ;뒷자리만 뽑아서 저장
else
OutputVar := Var ;2자리 숫자부터는 앞에 0이 없어도 되기 때문에 그대로 넣어준다.
}
else if(InputType = "num")
{
StringLen, DataLen, Var
if(DataLen < 2)
OutputVar := "0" . Var
else
OutputVar := Var ;2자리 숫자부터는 앞에 0이 없어도 되기 때문에 그대로 넣어준다.
}
else
{
MsgBox, 0, , 함수 호출 오류 1642
}
return OutputVar
}
[오토핫키] 공휴일, 주말을 검사하는 함수 만들기
[오토핫키] 비활성 윈도우 조작 (ControlSend, ControlSetText, ControlClick) (0) | 2021.03.07 |
---|---|
[오토핫키] 화면끄기, 사용자전환, 절전모드, 화면밝기 조절 (0) | 2021.02.18 |
[오토핫키] 대입연산자, 산술연산자, 비교연산자, 논리연산자에 대한 메모 (0) | 2021.01.10 |
[오토핫키] 파일, 폴더 관련 메모 (0) | 2020.12.25 |
[오토핫키] 공휴일, 주말을 검사하는 함수 만들기 (0) | 2020.12.17 |