<?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 에서 테스트