본문 바로가기
Developer/PHP

PHP 날짜와 날짜 사이 모든 날짜 배열로 구하기

by roqkfrlfhr 2020. 10. 12.

PHP 날짜와 날짜 사이 모든 날짜 배열로 구하기

 

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 형식의 문자열로 구하여 배열에 넣고 반환합니다.

시작 날짜와 마지막 날짜를 인자로 받아올 때, 정규식을 통해 올바른 날짜 형식이 아니라면 날짜 형식이 아니라는 문자열을 반환합니다.

 

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
)

 

 

제 글에 잘못된 정보, 더 좋은 방법 혹은 정보, 궁금하신 점, 

요청 사항 등이 있으시다면 언제든지 말씀해 주세요!

 

감사합니다.


댓글