먼저 토, 일요일을 제외한 국경일 및 명절 등을 정의합니다.
2010년 2월 26일부터 2일 휴가를 받았다고 가정하죠.
토, 일요일과 국경일 및 명절 등의 휴일을 제외하면 언제까지 휴가일까요?
2010년 2월 26일 금요일 - 1일
2010년 2월 27일 토요일 - 토요일이니 건너뛰고
2010년 2월 28일 일요일 - 역시 일요일이니 건너뛰고
2010년 3월 1일 월요일 - 국경일이군요.
2010년 3월 2일 화요일 - 2일. 이날까지군요.
이것을 프로그램으로 작성해볼까요?
1. 2010-02-26을 timestamp값을 바꿉니다.
2. 이제 이 값을 이용해 요일값을 구합니다.
요일값은 0:일, 1:월, 2:화, 3:수, 4:목, 5:금, 6:토요일입니다.
3. 요일값($w)를 이용해 토요일이나 일요일인지 검사합니다.
즉 0과 6인 경우만 조건이 참이 됩니다.
4. $holiday에 포함된 날짜인지 확인합니다.
5. 3과 4에 속하는 경우 휴가 기간을 늘려줘야겠죠?
6. 날짜를 하루 추가해줍니다.
7. 위 2번 과정을 반복합니다. 단 여기에 조건이 있어야겠죠?
이런 과정을 거친 정리된 코드입니다.
어때요? 참 쉽죠?
$holiday = array(
'2010-01-01',
'2010-02-15',
'2010-03-01',
'2010-05-05',
'2010-05-21',
'2010-09-21',
'2010-09-22',
'2010-09-23',
);
'2010-01-01',
'2010-02-15',
'2010-03-01',
'2010-05-05',
'2010-05-21',
'2010-09-21',
'2010-09-22',
'2010-09-23',
);
2010년 2월 26일부터 2일 휴가를 받았다고 가정하죠.
토, 일요일과 국경일 및 명절 등의 휴일을 제외하면 언제까지 휴가일까요?
2010년 2월 26일 금요일 - 1일
2010년 2월 27일 토요일 - 토요일이니 건너뛰고
2010년 2월 28일 일요일 - 역시 일요일이니 건너뛰고
2010년 3월 1일 월요일 - 국경일이군요.
2010년 3월 2일 화요일 - 2일. 이날까지군요.
이것을 프로그램으로 작성해볼까요?
1. 2010-02-26을 timestamp값을 바꿉니다.
$timestamp = strtotime('2010-02-26');
2. 이제 이 값을 이용해 요일값을 구합니다.
list($d,$w) = explode(' ',date('Y-m-d w',$timestamp));
"년-월-일 요일"값을 " "(공백) 기준으로 자르고, 각각 $d와 $w에 대입하는 코드입니다.요일값은 0:일, 1:월, 2:화, 3:수, 4:목, 5:금, 6:토요일입니다.
3. 요일값($w)를 이용해 토요일이나 일요일인지 검사합니다.
if ( $w%6==0 ) echo '토, 일요일';
0을 6으로 나누면 나머지는 0, 6을 6으로 나누면 나머지는 0.즉 0과 6인 경우만 조건이 참이 됩니다.
4. $holiday에 포함된 날짜인지 확인합니다.
if ( in_array($d,$holiday) ) echo '공휴일';
5. 3과 4에 속하는 경우 휴가 기간을 늘려줘야겠죠?
if ( $w%6==0 || in_array($d,$holiday) ) $추가++;
$추가 = 0; 미리 정의한 상태로 가정하지요.6. 날짜를 하루 추가해줍니다.
$timestamp+= 86400;
60초 * 60분 * 24시간 = 86400 하루입니다.7. 위 2번 과정을 반복합니다. 단 여기에 조건이 있어야겠죠?
이런 과정을 거친 정리된 코드입니다.
function holiday_check($date,$count)
{
$timestamp = strtotime($date);
$step = $plus = 0;
while ( $step < $count )
{
list($d,$w) = explode(' ',date('Y-m-d w',$timestamp));
$timestamp+= 86400;
$step++;
if ( $w%6==0 || in_array($d,$GLOBALS['holiday']) ) {
$plus++; $step--;
}
}
echo $d.' 추가:'.$plus.'일';
}
holiday_check('2010-02-26',2); // 2010-03-02 추가:3일
{
$timestamp = strtotime($date);
$step = $plus = 0;
while ( $step < $count )
{
list($d,$w) = explode(' ',date('Y-m-d w',$timestamp));
$timestamp+= 86400;
$step++;
if ( $w%6==0 || in_array($d,$GLOBALS['holiday']) ) {
$plus++; $step--;
}
}
echo $d.' 추가:'.$plus.'일';
}
holiday_check('2010-02-26',2); // 2010-03-02 추가:3일
어때요? 참 쉽죠?
'PHP' 카테고리의 다른 글
| 주말, 공휴일 등을 제외한 기간 구하기 (0) | 2010/02/03 |
|---|---|
| 배열의 크기 (0) | 2010/02/03 |
| 조합(Combination) 가능한 수 구하기 (0) | 2010/02/01 |
| 봄(Spring), 여름(Summer), 가을(Autumn), 겨울(Winter) 계절 구하기 (0) | 2010/01/30 |
| 저번주, 이번주, 다음주 (일요일, 월요일 기준) (0) | 2010/01/27 |
| 엑셀 영문 컬럼명 ↔ 숫자 (0) | 2010/01/20 |
댓글을 달아 주세요