BackEnd
PHP 날짜와 날짜 사이 모든 날짜 배열로 구하기
xeant
조회 수 : 98
2024.02.26 12:48
: 0
PHP에서 어느 날짜와 또 다른 어느 날짜 사이에 있는 모든 날짜들을 배열로 구하는 방법을 알려드리도록 하겠습니다.
yyyy-mm-dd 형식의 문자열로 시작날짜와 마지막 날짜를 받아,
시작 날짜와 마지막 날짜 사이의 모든 날짜를 yyyy-mm-dd 형식의 문자로 배열에 담아 반환하는 함수
function getDatesStartToLast($startDate, $lastDate) { $regex = "/^d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/"; if (!(preg_match($regex, $startDate) && preg_match($regex, $lastDate))) return "Not Date Format"; $period = new DatePeriod(new DateTime($startDate), new DateInterval('P1D'), new DateTime($lastDate. " +1 day")); foreach($period as $date) $dates[] = $date - > format("Y-m-d"); return $dates; }
위 함수는 yyyy-mm-dd 형식의 문자열로 시작 날짜와 마지막 날짜를 인자값으로 받아,
날짜 기간을 나타내는 객체 DatePeriod 에
시작 날짜와 마지막 날짜, 그리고 날짜 간격을 나타내는 객체 DateInterval로 날짜 간격을 하루씩 설정하여 날짜 기간을 구하고,
날짜 기간안의 모든 날짜를 yyyy-mm-dd 형식의 문자열로 구하여 배열에 넣고 반환합니다.
시작 날짜와 마지막 날짜를 인자로 받아올 때, 정규식을 통해 올바른 날짜 형식이 아니라면 날짜 형식이 아니라는 문자열을 반환합니다.
<?php function getDatesStartToLast($startDate, $lastDate) { $regex = "/^d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/"; if(!(preg_match($regex, $startDate) && preg_match($regex, $lastDate))) return "Not Date Format"; $period = new DatePeriod( new DateTime($startDate), new DateInterval('P1D'), new DateTime($lastDate." +1 day")); foreach ($period as $date) $dates[] = $date->format("Y-m-d");return $dates; } $dates = getDatesStartToLast("2020-09-25", "2020-10-12"); print_r($dates); /**********/ 출력 : Array ( [0] => 2020-09-25 [1] => 2020-09-26 [2] => 2020-09-27 [3] => 2020-09-28 [4] => 2020-09-29 [5] => 2020-09-30 [6] => 2020-10-01 [7] => 2020-10-02 [8] => 2020-10-03 [9] => 2020-10-04 [10] => 2020-10-05 [11] => 2020-10-06 [12] => 2020-10-07 [13] => 2020-10-08 [14] => 2020-10-09 [15] => 2020-10-10 [16] => 2020-10-11 [17] => 2020-10-12 ) ?>