<?php
$y = 2010;
$m = 4;
sscanf(date('wt',mktime(0,0,0,$m,1,$y)),'%1d%2d',$w,$t);
for ($i=1,$s=1,$e=(7-$w)%7+1,$l=ceil(($t+$w)/7);$i<=$l;$i++,$s=$e+1,$e=$i<$l?$s+6:$t)
{
printf('%d : %02d/%02d ~ %02d/%02d<br />'."\n",$i,$m,$s,$m,$e);
}
?>
지정한 달의 월요일부터 일요일까지 나눠서 출력합니다.
실행 결과는 아래와 같습니다.
1 : 04/01 ~ 04/04
2 : 04/05 ~ 04/11
3 : 04/12 ~ 04/18
4 : 04/19 ~ 04/25
5 : 04/26 ~ 04/30
…………………………………………………………………………………………………………
일요일부터 월요일까지 출력하는 방법입니다.
<?php
$y = 2010;
$m = 4;
sscanf(date('wt',mktime(0,0,0,$m,1,$y)),'%1d%2d',$w,$t);
for ($i=1,$s=1,$e=7-$w,$l=ceil(($t+$w)/7);$i<=$l;$i++,$s=$e+1,$e=$i<$l?$s+6:$t)
{
printf('%d : %02d/%02d ~ %02d/%02d<br />'."\n",$i,$m,$s,$m,$e);
}
?>
실행 결과입니다.
1 : 04/01 ~ 04/03
2 : 04/04 ~ 04/10
3 : 04/11 ~ 04/17
4 : 04/18 ~ 04/24
5 : 04/25 ~ 04/30
…………………………………………………………………………………………………………
* 간단한 설명
지정한 달의 1일 요일값(0:일요일,1:월요일,~,6:토요일)과 날수(1월:31,2월:28~29,~,12월:31일)를 구합니다.
그 값을 이용해 반복 횟수를 구합니다.
시작일은 당연히 1일. 종료일은 요일값에 따라 맞춰줍니다.
다음 시작일은 이전 종료일에 1 더하고, 종료일은 여기에 6 더해주면 되죠.
단, 전체 날수 부분의 조정이 필요합니다.
이상입니다. |
|