본문 바로가기

개인 공부

[php] 사이 날짜 구하기 (시작날짜 ~ 끝 날짜)

728x90

날짜 사이값 구하기

사이값 좀 구하려니까 너무어려운 글들이 많아... 간단하게 만들어보았다.
거창한건 아니고 배열로 값들을 집어넣어준건데.

딱히 이렇게 사용하지않고 키값을 날짜로해줘도 나름 편하다.
나같은경우엔 저기 중복들도있어서 중복되면 안의 값들이 알아서 다 들어가도록 만들고
그 부분에서 간단한부분만 잘라내서 가져왔다.

$s_date = Date('Y-m-d',strtotime('2022-12-01'));
$e_date = Date('Y-m-d',strtotime('2022-12-06'));
/* 원하는 값  0 -> 2022-12-01    1 -> 2022-12-02 ..... 12-06까지*/

원하는 값은
0 -> 2022-12-01
1 -> 2022-12-02
... 5-> 2022-12-06
배열로 모든 값을 받아와서 깔끔하게 정리하려한다.

간단하게 함수를 하나 만들어주면 된다.

function getDatesStartToLast($startDate, $lastDate) {
    $dates = array();
    $regex = "/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/";
    /* 형식을 2022-02-01 로 맞춤 */
    if (!(preg_match($regex, $startDate) && preg_match($regex, $lastDate))) {
        return '값이다름';
    }
    /* 형식을 맞게 하지않으면 값이 다르다고 돌려줌 */
    if ($startDate>$lastDate) {
        return '시작일이 마지막일보다 큼';
    }
    /* 일자를 비교해서 값을 돌려줌. */
    for ($date=$startDate; $date<=$lastDate; $date=date("Y-m-d",strtotime('+1 days',strtotime($date)))) {
        $dates[] = $date;
    }
    /* 시작일을 기본으로 strtotime으로 하루씩 올려준다. */
    return $dates;
}
  1. 값을 선언해놓는다.
  2. 처음 설정한 값들을 직접 넣어준다.
  3. 값들이 date타입으로 비교했을경우 제대로 형식을 갖춰서 가져왓는지 확인한다.
  4. 시작일과 마지막일 사이의 날짜가 있는지 비교한다. ( 2일밑이면 원레 그냥 배열로 2개만 리턴했는데 보기편하라고..)
  5. 시작일을 startdate로 놔두고 하루씩 올려가며 배열에 일짜를 넣어준다.
    strtotime +1 days 는 하루를 더하기에 매우 편안하게 진행된다.
$date1 = getDatesStartToLast($s_date,$e_date);
$date2 = getDatesStartToLast($e_date,$s_date);
$date3 = getDatesStartToLast('1234-1212-1212','4321-43-4343');
asd($date1);
asd($date2);
asd($date3);

완성은 이렇게 되어있다.

 

728x90
댓글