2018년 5월 14일 월요일

[PHP예제] 072 세 번째 월요일을 구하고 싶을 때




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>세 번째 월요일을 구하고 싶을 때</title>
    <link href="style.css" rel="stylesheet">
</head>
<body>
<div>
<?php
date_default_timezone_set('Asia/Seoul');

echo "<p>2016년 7월의 세 번째 월요일 구하기</p>";

$year = 2016;
$month = 7;
$week = 3;
$weekday = 1; // 월요일

$ret = getNthWeekday($year, $month, $week, $weekday);
if( $ret !== false )
{
  echo $ret . "일";
}
else
{
  echo "해당하는 날짜는 존재하지 않음";
}
echo "</p>";

// getNthWeekday() 함수
// 지정 날짜의 o번째 o요일의 날짜를 반환함
// 해당하는 날짜가 없는 경우에는 false를 반환함
// 제1인수에는 연도
// 제2인수에는 월
// 제3인수에는 주 번호(제o주째)
// 제4인수에는 요일을 0(일요일)에서 6(토요일)의 숫자로 지정
function getNthWeekday($year, $month, $week, $weekday)
{
  // 주의 지정이 옳은지 확인함
  if( $week < 1 || $week > 5 )
  {
    return false;
  }

  // 요일의 지정이 옳은지 확인함
  if( $weekday < 0 || $weekday > 6 )
  {
    return false;
  }

  // 지정한 년 월의 첫째 날(1일)의 요일을 구함
  $weekdayOfFirst = (int) date('w', mktime(0, 0, 0, $month, 1, $year));

  // 첫 째 날의 월요일을 바탕으로 첫 번째 o요일의 날짜를 구함
  $firstDay = $weekday - $weekdayOfFirst + 1;
  if( $firstDay <= 0 )
  {
    $firstDay += 7;
  }

  // 첫 번째 o요일에 7의 배수를 가산해 제o주의 o요일의 날짜를 구함
  $resultDay = $firstDay + 7 * ($week - 1);

  // 마지막으로 처리 결과가 올바른 날짜인지 확인함.
  if( ! checkdate($month, $resultDay, $year) )
  {
    return false;
  }

  return $resultDay;
}
?>
</div>
</body>
</html>


댓글 1개:

  1. 지금 꼭 필요하던 거였는데 만들기는 귀찮고 해서 혹시나 해서 검색 해봤는데 딱 있네요. 감사합니다.

    답글삭제