PHP에서 주어진 두 날짜 사이에 각 요일이 몇 번씩 등장하는지(즉, 요일별 일수를) 확인해야 하는 경우가 종종 있습니다. 예를 들어 프로젝트 기간 분석, 근무일 집계, 통계 리포트 작성 등에서 유용하게 활용할 수 있습니다.
핵심 아이디어는 시작 날짜부터 종료 날짜까지 하루씩 반복하면서, 각 날짜가 무슨 요일인지 판별하고 해당 요일의 카운트를 1씩 증가시키는 것입니다.
구현 코드
<?php
$start = "11-11-2019";
$end = "12-12-2019";
$week_day = array('Monday' => 0,
'Tuesday' => 0,
'Wednesday' => 0,
'Thursday' => 0,
'Friday' => 0,
'Saturday' => 0,
'Sunday' => 0);
$start = new DateTime($start);
$end = new DateTime($end);
while($start <= $end )
{
$time_stamp = strtotime($start->format('d-m-Y'));
$week = date('l', $time_stamp);
$week_day[$week] = $week_day[$week] + 1;
$start->modify('+1 day');
}
print_r("주어진 기간 동안의 요일별 일수는 다음과 같습니다");
print_r($week_day);
?>실행 결과
주어진 기간 동안의 요일별 일수는 다음과 같습니다Array ( [Monday] => 5 [Tuesday] => 5 [Wednesday] => 5 [Thursday] => 5 [Friday] => 4 [Saturday] => 4 [Sunday] => 4 )
코드 설명
먼저 비교할 두 날짜를 'DateTime' 객체로 정의하고, 일주일의 각 요일을 키로 가지며 초기값이 모두 0인 배열을 생성합니다.
그다음 while 루프를 사용하여 시작 날짜가 종료 날짜에 도달할 때까지 하루 단위로 반복합니다. 루프 내부에서는 현재 날짜를 strtotime() 함수로 타임스탬프 값으로 변환한 뒤, 이 값을 변수에 저장합니다. 이어서 date('l') 함수를 호출하면 해당 날짜의 요일 이름(예: Monday, Tuesday)을 문자열로 얻을 수 있습니다.
얻어진 요일 이름을 키로 사용해 'week_day' 배열의 해당 값을 1씩 증가시키고, modify('+1 day') 메서드로 날짜를 하루씩 앞당깁니다. 이 과정을 반복하면 각 요일이 지정된 기간 내에서 몇 번 등장했는지 자동으로 집계됩니다.
위 예제에서는 2019년 11월 11일부터 2019년 12월 12일까지 총 32일 동안 월요일부터 목요일까지는 5번, 금요일부터 일요일까지는 4번씩 등장한 것을 확인할 수 있습니다.