테스트 사이트 - 개발 중인 베타 버전입니다

요일별 다른 변수 적용 채택완료

은빛여전사 6개월 전 조회 2,399

</p>

<p>$ch = curl_init();

$url = '<a href="http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo';" target="_blank" rel="noopener noreferrer">http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo';</a> /*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);</p>

<p>

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);</p>

<p>

$display = []; //</p>

<p> $xml = simplexml_load_string($response);</p>

<p>            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.'';</p>

<p>

                $display[] = array(

                    'date' => $key

                    , 'name' => $val

                    , 'isholi' => $isholi

                );

            }</p>

<p>$today = date('Y-m-d');

$ho = 0; // 기본값은 공휴일 아님</p>

<p>foreach ($display as $holiday) {

    if ($holiday['date'] == $today) {

        $ho = $holiday['isholi']; // 공휴일이면 Y, 아니면 0

        break;

    }

}</p>

<p> </p>

<p>

이렇게 공휴일 정보를 불러와서

오늘이 공휴일이면  $ho = Y

공휴일이 아니면     $ho = 0

이렇게 들어가게되며 테스트 해보면

정상적으로 $ho  값이 들어옵니다

 

</p>

<p>$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); // </p>

<p>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;

    }</p>

<p>    if ($dow == 0 || $dow == 6) { // 주말

        $in_time = $data75;

    }

}

위와 같이 했더니 평일에도 $in_time  변수에

$data75 값이 들어가고 있습니다.

먼가 꼬인거 같은데.. 잘 모르겠씁니다 ㅠㅠ

 

$in_time  변수에

토요일, 일요일, 공휴일에는 $data75 값이

평일에는 $data71, $data72, $data73 값이 일주일마다 

돌아가면서 값이 들어가게 하려고 하는데요

 

머가 문제인지 도움 부탁드립니다
 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
6개월 전

뭐가 문제인지는 모르겠습니다만 다음 코드를 시도해 보았으면 합니다.

</p>

<p><?php

// 오늘 날짜와 공휴일 정보 불러오기 (기존 코드는 유지)

$today = date('Y-m-d');

$dow = date('w', strtotime($today)); // 0(일) ~ 6(토)</p>

<p> </p>

<p>// 기준일 설정 (2025-04-21)

$base_date = '2025-04-21'; </p>

<p> </p>

<p>// 기준일로부터 일수 차이 계산

$days_diff = (strtotime($today) - strtotime($base_date)) / 86400;</p>

<p> </p>

<p>// 기존 로직과 일관성 유지를 위한 주차 계산 방식 유지

$week = floor(($dow + $days_diff) / 7);

$rotation = ($week - 1) % 3; // 3주 순환 (0, 1, 2)</p>

<p> </p>

<p>// 명확한 우선순위로 조건 검사

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;

    }

}</p>

<p>

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

은빛여전사
6개월 전
감사합니다

댓글을 작성하려면 로그인이 필요합니다.

들레아빠
6개월 전

</p>

<p>$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부터 시작)</p>

<p>// 공휴일 또는 주말 체크

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;

    }

}</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

은빛여전사
6개월 전
감사합니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인