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');
$cutOffDay = 25;
$date = mktime(0, 0, 0, 10, 27, 2013);
echo "<p>마감일:" . $cutOffDay . "일</p>";
echo "<p>계산 기준일:" . date('Y/m/d', $date) . "</p>";
$ret = getCutOffDate($cutOffDay, $date);
if( $ret !== false )
{
echo "<p>결과:" . date('Y/m/d', $ret) . "</p>";
}
else
{
echo "<p>잘못된 마감일입니다.</p>";
}
// getCutOffDate() 함수
// 제1인수에는 마감일을 지정함. 1에서 31의 숫자를 지정함
// 제2인수에는 계산 기준일의 타임스탬프를 지정함
// 생략했을 경우는 현재 일시의 마감일을 계산함
function getCutOffDate($cutOffDay, $timestamp = false)
{
// 타임스탬프를 생략할 때는 현재의 일시를 계산 기준일로 함
if( $timestamp === false )
{
$timestamp = time();
}
// 지정한 마감일이 1에서 31의 범위에서 지정되었는지 확인함
if( $cutOffDay < 1 || $cutOffDay > 31 )
{
return false;
}
// 계산 기준일의 타임스탬프로부터 년, 월, 일, 말일을 구함
$date = getdate($timestamp);
$year = $date['year'];
$month = $date['mon'];
$day = $date['mday'];
$endOfMonth = (int) date('t', $timestamp);
// 말일이 지정 마감일보다 앞이면 이번 달 말일을 마감일로 반환함
// 말일로 지정한 마감일은 모두 숫자이므로
// min() 함수를 사용해 한 줄로 값을 설정하고 대입함
$fixedCutOffDay = min($endOfMonth, $cutOffDay);
// 계산 기준일이 마감일을 지나는 경우 다음 달의 말일을 마감일로 반환함
if( $day > $fixedButOffDay )
{
$month++; // 월을 가산함
// 지정 마감일과 다음 달의 말일을 비교해 작은 쪽을 마감일로 지정함
$endOfNextMonth = (int) date('t', mktime(0, 0, 0, $month, 1, $year));
$fixedButOffDay = min($endOfNextMonth, $cutOffDay);
}
// 마감일의 타임스탬프를 반환함
return mktime(0, 0, 0, $month, $fixedCutOffDay, $year);
}
?>
</div>
</body>
</html>
|
2018년 5월 14일 월요일
[PHP예제] 071 마감일을 구하고 싶을 때
피드 구독하기:
댓글 (Atom)

댓글 없음:
댓글 쓰기