공휴일 체크 sql 질문입니다. 채택완료
1. 공휴일 데이터를 가져옵니다.
</p>
<p>$holy_data = "select * from holydata";</p>
<p> </p>
<p>$holy = ['2021-01-06','2021-01-07','2021-01-08'];</p>
<p>
2. 비교할 데이터(2021-01-06)을 넣어서 공휴일에 해당하면 +1일을 합니다.
</p>
<p>$chkDate = '2021-01-06';</p>
<pre>
foreach ($holy as $key => $row) {
if ($chkDate == $row['HOLIDAY']) {
// 공휴일이라면 ON
$timestamp = strtotime($chkDate." +1 days");
$return_date = date("Y-m-d", $timestamp);
}
}</pre>
<p>
4. 결과가 주말에 해당한다면 토요일은 +2일 일요일이라면 +1일을 하여 평일로 바꿉니다.
제가 원하는 결과는 2021-01-11입니다.
왜냐하면 6일부터 8일은 임의로 설정한 공휴일이고 9일부터 10일은 주말에 해당하기 때문입니다..
근데 결과는 2021-01-07일로 나옵니다.. 코드를 봐선 당연히 7일로 나와야하는데
어떻게하면 8일까치 체크하게 할수 잇을까요?
도움좀 부탁드립니다.
답변 4개
2021-01-11
=> 휴무일이라면 다음주 월요일이 나온다는건가요?
=> 설명상으로 왜 해당 날짜가 나온다는 이유가 안 보이네요.
// 공휴일이라면 1일 추가 $is_holy = 1; $day_plus = 7 - $chkDateYoil + 1; $timestamp = strtotime($chkDate." +".$day_plus." days"); $return_date = date("Y-m-d", $timestamp);
=> 공휴일 부분을 이렇게 고치시면 될거 같네요.
답변에 대한 댓글 2개
[code]
$holy = [
'2020-12-23',
'2020-12-24',
'2020-12-25',
'2020-12-28',
];
$chkDate = '2020-12-23'; // 휴무일
$chkDateReturn = get_date($chkDate);
echo "휴무추가 : " . $chkDateReturn . "<br />";
echo "<br />";
function get_date($chkDate)
{
global $holy;
$chkDateYoil = date("w", strtotime($chkDate)); // 토요일(6), 일요일(0)
if ($chkDateYoil == 6) {
// 토요일은 2일 추가
$timestamp = strtotime($chkDate . " +2 days");
$chkDate = date("Y-m-d", $timestamp);
} else if ($chkDateYoil == 0) {
// 일요일은 1일 추가
$timestamp = strtotime($chkDate . " +1 days");
$chkDate = date("Y-m-d", $timestamp);
}
// 평일인경우 휴무일 비교
foreach ($holy as $key => $holyday) {
if ($chkDate == $holyday) {
// 공휴일이라면 1일 추가
$day_plus = 8 - $chkDateYoil;
$timestamp = strtotime($chkDate." +".$day_plus." days");
$chkDate = date("Y-m-d", $timestamp);
}
}
return $chkDate;
}
[/code]
주말을 지나 월요일(12월 28일)까지 휴무일로 지정되어도
12월 29일로 아웃풋이 나와야하는데 21년 1월 2일로 나온느데 왜그런지 도무지 모르겟습니다..
댓글을 작성하려면 로그인이 필요합니다.
$chkDateYoil = date("w", strtotime($chkDate)); // 토요일(6), 일요일(0)
=> 요일을 숫자로 변경
=> 월(1), 화(2) ~ 토(6), 일(0)
$day_plus = 7 - $chkDateYoil + 1;
=> 일주일 - (현재요일숫자) + (월요일이므로 하루더함)
=> 월요일을 예로 들면 숫자가 1이므로 해당 날짜에서 6일을 더한후 +1일을 하면 다음주 월요일
=> 7일에서 해당 날짜의 요일숫자를 뺀 숫자를 더하면 그주 일요일이고 거기에 1을 더해서 월요일
=> 간단하게 하면
=> $day_plus = 8 - $chkDateYoil;
=> 이렇게 해도 될거 같네요 $timestamp = strtotime($chkDate." +".$day_plus." days"); $return_date = date("Y-m-d", $timestamp);
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>$holy = ['2021-01-06','2021-01-07','2021-01-08'];
$return_date = $tmp_date = $chkDate = "2021-01-06";
if(in_array($chkDate, $holy) === true) {
$tmp_date = date("Y-m-d", strtotime("+1 day", strtotime(end($holy))));
}</p>
<p>$n = date("N", strtotime($tmp_date));</p>
<p>if($n < 6) {
$return_date = $tmp_date;
} else {
$return_date = date("Y-m-d", strtotime((8 - $n)." day", strtotime($tmp_date)));
}</p>
<p>echo $return_date;</p>
<p>
답변에 대한 댓글 3개
여길 말씀하시는 거 같네요.
https://www.php.net/manual/en/function.strtotime.php#refsect1-function.strtotime-examples
여길 보시면 이해가 갈 겁니다.
* 지금 제가 남긴 코드는 보니 오류가 있네요.
수포자 였던게 한이됩니다.. 감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
$chkDate = '2021-01-02'; // 토요일 $chkDateReturn = get_date($chkDate); echo "토요일 : ".$chkDate." "; echo "토요일 휴무추가 : ".$chkDateReturn." "; echo " ";
$chkDate = '2021-01-03'; // 일요일 $chkDateReturn = get_date($chkDate); echo "일요일 : ".$chkDate." "; echo "일요일 휴무추가 : ".$chkDateReturn." "; echo " ";
$chkDate = '2021-01-06'; // 휴무일 $chkDateReturn = get_date($chkDate); echo "휴무일 : ".$chkDate." "; echo "휴무추가 : ".$chkDateReturn." "; echo " ";
$chkDate = '2021-01-05'; // 평일 $chkDateReturn = get_date($chkDate); echo "휴무일 : ".$chkDate." "; echo "휴무추가 : ".$chkDateReturn." "; echo " ";
function get_date($chkDate) { global $holy;
$chkDateYoil = date("w", strtotime($chkDate)); // 토요일(6), 일요일(0)
if ($chkDateYoil == 6) { // 토요일은 2일 추가 $timestamp = strtotime($chkDate." +2 days"); $return_date = date("Y-m-d", $timestamp); } else if ($chkDateYoil == 0) { // 일요일은 1일 추가 $timestamp = strtotime($chkDate." +1 days"); $return_date = date("Y-m-d", $timestamp); } else { // 평일인경우 휴무일 비교 $is_holy = 0; foreach ($holy as $key => $row) { if ($chkDate == $row) { // 공휴일이라면 1일 추가 $is_holy = 1; $timestamp = strtotime($chkDate." +1 days"); $return_date = date("Y-m-d", $timestamp); } } if ($is_holy == 0) { // 휴무일이 아닌경우 해당날짜로 리턴 $return_date = $chkDate; } }
return $return_date; } ?>
이렇게 하시면 될거 같네요
답변에 대한 댓글 1개
휴무일 : 2021-01-06
휴무추가 : 2021-01-07
이렇게 나옵니다. 2021-01-11 이렇게 나와야 하거든요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
근데 $day_plus = 7 - $chkDateYoil + 1; 이부분이 정말 이해가 안됩니다.
쉬워보이는데 해당 부분이 어떻게 공휴일 배열을 모두 체크할수 잇는건가요? ㅠ
설명부탁드려도될까요.