Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 세 개의 문자열(연도, 월, 일)을 결합해 다음 날짜 계산하는 방법

PHP에서 연도, 월, 일이 각각 별도의 문자열로 주어져 있을 때, 이 값들을 조합하여 특정 기준 날짜보다 이후에 해당하는 가장 가까운 날짜를 찾아야 하는 경우가 있습니다. 이 문제는 세 개의 foreach 반복문을 중첩시켜 손쉽게 해결할 수 있습니다.

해결 접근 방식

기본 아이디어는 다음과 같습니다.

  • 쉼표(,)로 구분된 연도, 월, 일 문자열을 explode() 함수로 각각 배열로 변환합니다.
  • 세 개의 반복문을 중첩하여 연도 → 월 → 일 순서로 가능한 모든 날짜 조합을 생성합니다.
  • 생성된 날짜 문자열('YYYY-MM-DD' 형식)이 기준 날짜보다 크면 해당 값을 변수에 저장하고 break 3;으로 모든 반복문을 한 번에 종료합니다.

여기서 break 3;은 현재 반복문뿐 아니라 바깥쪽 3개의 반복문까지 모두 탈출하라는 의미입니다. 덕분에 원하는 날짜를 찾는 즉시 불필요한 반복을 멈추고 효율적으로 코드를 마칠 수 있습니다.

예제 코드

<!DOCTYPE html>
<html>
<body>
<?php
$givenDate = '2018-04-28';
$fiveYears  = '2018,2019,2020,2021,2022';
$fiveMonths = '03,05,07,08,09';
$fiveDays   = '25,26,27,28,29';
$fYears = explode(',', $fiveYears);
$fMonths = explode(',', $fiveMonths);
$fDays = explode(',', $fiveDays);
$nextDate = null;
foreach($fYears as $yr) {
    foreach($fMonths as $mn) {
        foreach($fDays as $dy) {
            $t = $yr.'-'.$mn.'-'.$dy;
            if($t > $givenDate) {
                $nextDate = $t;
                break 3;
            }
        }
    }
}
if($nextDate) {
    echo '다음 날짜 값은 = ' . $nextDate;
}
else {
    echo '날짜를 찾지 못했습니다.';
}
?>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

다음 날짜 값은 =2018-05-25

코드 동작 원리

기준 날짜는 2018-04-28입니다. 반복문은 연도 2018부터 시작해 월 03, 일 25부터 차례대로 조합을 시도합니다. '2018-03-25'부터 '2018-03-29'까지는 기준 날짜보다 작으므로 건너뛰고, 월이 05가 되어 '2018-05-25'가 만들어지는 순간 처음으로 기준 날짜보다 커지므로 이 값이 최종 결과로 저장됩니다.

참고로 이 코드가 정상적으로 동작하는 이유는 'YYYY-MM-DD' 형식의 날짜 문자열이 사전순(lexicographic) 비교만으로도 시간순 비교와 동일한 결과를 내기 때문입니다. 실무에서는 DateTime 클래스나 strtotime() 함수를 활용하면 더 다양한 형식과 유효성 검사까지 안전하게 처리할 수 있습니다.