요일별 다른 변수 적용
본문
$ch = curl_init();
$url = 'http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo'; /*URL*/
$ss = date('Y');
$ss1 = date("m");
$queryParams = '?' . urlencode('serviceKey') . '=XOF2kmoeLs09B60ccCpdjBDu1aTUM9RQRyLfgJPxV3Z0TPmpnj1NtbwTssTQxLVHMqo3suOmDb8b%2BDat9%2FihPw%3D%3D';
$queryParams .= '&' . urlencode('solYear') . '=' . urlencode($ss);
$queryParams .= '&' . urlencode('solMonth') . '=' . urlencode($ss1);
curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
curl_close($ch);
$display = []; //
$xml = simplexml_load_string($response);
foreach ($xml->body->items->item as $item) {
$key = substr($item->locdate,0,4).'-'.substr($item->locdate,4,2).'-'.substr($item->locdate,6,2);
$val = $item->dateName.'';
$isholi = $item->isHoliday.'';
$display[] = array(
'date' => $key
, 'name' => $val
, 'isholi' => $isholi
);
}
$today = date('Y-m-d');
$ho = 0; // 기본값은 공휴일 아님
foreach ($display as $holiday) {
if ($holiday['date'] == $today) {
$ho = $holiday['isholi']; // 공휴일이면 Y, 아니면 0
break;
}
}
이렇게 공휴일 정보를 불러와서
오늘이 공휴일이면 $ho = Y
공휴일이 아니면 $ho = 0
이렇게 들어가게되며 테스트 해보면
정상적으로 $ho 값이 들어옵니다
$today = date('Y-m-d');
$dow = date('w', strtotime($today));
$base_date = '2025-04-21';
$term = (strtotime($today) - strtotime($base_date)) / 86400;
$week = floor(($dow + $term) / 7); //
if ($ho == 'Y') { // 공휴일
$in_time = $data75;
} else {
switch (($week - 1) % 3) {
case 0:
$in_time = $data71;
break;
case 1:
$in_time = $data72;
break;
case 2:
$in_time = $data73;
break;
}
if ($dow == 0 || $dow == 6) { // 주말
$in_time = $data75;
}
}
위와 같이 했더니 평일에도 $in_time 변수에
$data75 값이 들어가고 있습니다.
먼가 꼬인거 같은데.. 잘 모르겠씁니다 ㅠㅠ
$in_time 변수에
토요일, 일요일, 공휴일에는 $data75 값이
평일에는 $data71, $data72, $data73 값이 일주일마다
돌아가면서 값이 들어가게 하려고 하는데요
머가 문제인지 도움 부탁드립니다
답변 2
뭐가 문제인지는 모르겠습니다만 다음 코드를 시도해 보았으면 합니다.
<?php
// 오늘 날짜와 공휴일 정보 불러오기 (기존 코드는 유지)
$today = date('Y-m-d');
$dow = date('w', strtotime($today)); // 0(일) ~ 6(토)
// 기준일 설정 (2025-04-21)
$base_date = '2025-04-21';
// 기준일로부터 일수 차이 계산
$days_diff = (strtotime($today) - strtotime($base_date)) / 86400;
// 기존 로직과 일관성 유지를 위한 주차 계산 방식 유지
$week = floor(($dow + $days_diff) / 7);
$rotation = ($week - 1) % 3; // 3주 순환 (0, 1, 2)
// 명확한 우선순위로 조건 검사
if ($ho == 'Y') {
// 1. 공휴일인 경우 (평일/주말 상관없이)
$in_time = $data75;
} else if ($dow == 0 || $dow == 6) {
// 2. 공휴일이 아닌 주말(토/일)인 경우
$in_time = $data75;
} else {
// 3. 평일이면서 공휴일이 아닌 경우 - 3주 순환 패턴 적용
switch ($rotation) {
case 0:
$in_time = $data71;
break;
case 1:
$in_time = $data72;
break;
case 2:
$in_time = $data73;
break;
}
}
!-->
$today = date('Y-m-d');
$dow = date('w', strtotime($today)); // 0 (일) ~ 6 (토)
$base_date = '2025-04-21'; // 기준일 (월요일)
$term = (strtotime($today) - strtotime($base_date)) / 86400; // 날짜 차이 (일 단위)
$week = floor($term / 7); // 주차 계산 (0부터 시작)
// 공휴일 또는 주말 체크
if ($ho == 'Y' || $dow == 0 || $dow == 6) { // 공휴일이거나 주말
$in_time = $data75;
} else { // 평일
switch ($week % 3) { // 0,1,2 주기로 반복
case 0:
$in_time = $data71;
break;
case 1:
$in_time = $data72;
break;
case 2:
$in_time = $data73;
break;
}
}
답변을 작성하시기 전에 로그인 해주세요.