<?php header("Content-Type: text/html; charset=UTF-8");?>
Testing function : Week Of the Month....<br />
(첫주의 시작이 수요일 이전일 때만 한 주로 인정하는 경우, 일요일이 한 주의 시작인 경우)
<HR width="400" align=left><br />
<?php
error_reporting(E_ALL);
date_default_timezone_set("Asia/Seoul");
$dates = array ("2017/2/1","2017/4/3","2017-05-29","2017-06-26","2017-07-01",
"2017-7-3","2017-07-31","2017-08-07","2017-09-04","2017/09/11","2017/9/30",
"2017/10/2","2017/10/30","2017/11/27","2017/12/4","2018/1/1","2018/4/2");
foreach ($dates as $p => $q) {
echo $p.")". $q . " : " . WeekOfMonth($q)."<BR />\n";
}
//몇번째 주인지 계산
function weekOfMonth($vdate) {
$mydate = strtotime("monday this week, +2 days", strtotime($vdate)); //수요일을 기준으로 "wednesday this week"으로 해도 될 듯...
$month1 = date("m", $mydate);
$rvalue = (int)$month1 ."월 "; //리턴값
$firstOfMonth = strtotime(date("Y-m-01", $mydate)); //그달의 첫날
//일요일을 한주의 시작으로 간주하는 경우 만일 그 달의 시작일이 일요일이면 이전 주(달)로 계산되기 때문에 임시로 하루를 증가시킴. (심지어 2017-01-01(일)은 2016년 12월로 계산되기도 함)
if(date("w",$firstOfMonth)==0) $firstOfMonth = strtotime("tomorrow",$firstOfMonth);
$weekOfMonth = intval(date("W",$mydate)) - intval(date("W",$firstOfMonth)) + 1; //전체주수-그달 첫날의 주수 +1
// 그달의 시작일이 수요일 이후 즉, 목금토일 때는 한주를 줄임
if(date("w",$firstOfMonth) > 3) $weekOfMonth -= 1;
$rvalue .= $weekOfMonth. "주";
return $rvalue;
}
?>
결과값:
Testing function : Week Of the Month....
(첫주의 시작이 수요일 이전일 때만 한주로 인정하는 경우, 일요일이 한주의 시작인 경우)
0)2017/01/01 : 1월 1주
1)2017/01/12 : 1월 3주
2)2017/2/1 : 2월 2주
3)2017/4/3 : 4월 1주
4)2017-05-29 : 5월 5주
5)2017-06-26 : 6월 4주
6)2017-07-01 : 7월 1주
7)2017-7-3 : 7월 1주
8)2017-07-31 : 8월 1주
9)2017-08-07 : 8월 2주
10)2017-09-04 : 9월 1주
11)2017/09/11 : 9월 2주
12)2017/9/30 : 10월 1주
13)2017/10/2 : 10월 1주
14)2017/10/30 : 11월 1주
15)2017/11/27 : 11월 5주
16)2017/12/4 : 12월 1주
17)2018/1/1 : 1월 1주
18)2018/4/2 : 4월 1주
본인 소스가 누추하지만 작동은 되는듯...
php 5.2 에서 테스트
최근댓글