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

PHP에서 두 날짜 사이의 모든 날짜를 배열로 반환하는 방법

PHP 프로젝트를 진행하다 보면 시작 날짜부터 종료 날짜까지 모든 날짜를 목록으로 가져와야 하는 경우가 종종 있습니다. 예를 들어 캘린더 기능, 통계 집계, 예약 시스템 등을 구현할 때 유용하게 활용됩니다. 이 글에서는 strtotime() 함수와 반복문을 조합하여 두 날짜 사이의 모든 날짜를 배열로 반환하는 방법을 소개합니다.

예제 코드

<?php
    function displayDates($date1, $date2, $format = 'd-m-Y') {
        $dates = array();
        $current = strtotime($date1);
        $date2 = strtotime($date2);
        $stepVal = '+1 day';
        while ($current <= $date2) {
            $dates[] = date($format, $current);
            $current = strtotime($stepVal, $current);
        }
        return $dates;
    }
    $date = displayDates('2019-11-10', '2019-11-20');
    var_dump($date);
?>

코드 동작 원리

위 코드의 핵심 로직은 다음과 같습니다.

1. 날짜 변환: strtotime() 함수를 사용하여 입력받은 두 날짜를 Unix 타임스탬프(정수 값)로 변환합니다.
2. 반복 처리: while 문으로 현재 타임스탬프가 종료 날짜보다 작거나 같은 동안 반복합니다.
3. 배열 저장: 각 반복마다 date() 함수로 지정한 형식('d-m-Y', 즉 일-월-년)에 맞춰 문자열을 만들어 배열에 추가합니다.
4. 1일씩 증가: strtotime('+1 day', $current)를 통해 현재 날짜에서 하루씩 증가시켜 다음 반복으로 넘어갑니다.

실행 결과

위 코드를 실행하면 아래와 같이 2019년 11월 10일부터 20일까지 총 11개의 날짜가 배열로 출력됩니다.

array(11) {
    [0]=>
    string(10) "10-11-2019"
    [1]=>
    string(10) "11-11-2019"
    [2]=>
    string(10) "12-11-2019"
    [3]=>
    string(10) "13-11-2019"
    [4]=>
    string(10) "14-11-2019"
    [5]=>
    string(10) "15-11-2019"
    [6]=>
    string(10) "16-11-2019"
    [7]=>
    string(10) "17-11-2019"
    [8]=>
    string(10) "18-11-2019"
    [9]=>
    string(10) "19-11-2019"
    [10]=>
    string(10) "20-11-2019"
}

참고: DateTime 클래스를 활용한 대체 방법

PHP 5.3 이상에서는 객체 지향 방식인 DateTimeDateInterval 클래스를 사용하는 것이 더 권장됩니다. 코드가 더 직관적이며 날짜 계산 오류 가능성도 줄어듭니다.

$begin = new DateTime('2019-11-10');
$end = new DateTime('2019-11-20');
$interval = new DateInterval('P1D'); // 1일 간격
$daterange = new DatePeriod($begin, $interval, $end->modify('+1 day'));

foreach ($daterange as $date) {
    echo $date->format("d-m-Y") . <br/>;
}

DatePeriod를 활용하면 별도의 반복문 로직 없이도 날짜 범위를 깔끔하게 처리할 수 있으므로, 최신 PHP 환경이라면 이 방식을 우선적으로 고려해 보시기 바랍니다.