[PHP] 지난 달의 첫 째 날짜와 다음 달의 마지막 날짜를 구하는 방법
문제
PHP 환경의 웹 상에서 오늘 날짜를 기준으로 지난 달의 첫 째 날부터 다음 달의 마지막 날 까지의 일정을 불러와야 하는 상황이 있었습니다.
예를 들어, 오늘이 2025년 8월 10일이면, 제가 원하는 날짜 범위는 2025년 7월 1일 부터 2025년 9월 30일 까지인 것이죠. 이게 매우 간단한 것 같지만 은근 신경 써야 할 부분이 많이 있었습니다.
해결
물론 PHP 는 그 오랜 역사만큼이나 내장 함수가 잘 만들어져 있기 때문에 그 해결 방법은 어렵지 않습니다.
지난 달의 첫 번째 날짜 구하기
우선 지난 달의 첫 번째 날짜를 구하는 방법은 아래와 같습니다.
$from = date('Y-m-01', strtotime(date('Y-m-01').' -1 month'));
현재 시점인 2025년 8월 10일을 기준으로 하나씩 결과물을 보자면,
date('Y-m-01')
="2025-08-01"
date('Y-m-01').' -1 month'
="2025-08-01 -1 month"
strtotime(date('Y-m-01').' -1 month')
=1751328000
date('Y-m-01', strtotime(date( 'Y-m-01').' -1 month'))
=2025-07-01
눈치가 빠른 분들은 그냥 date('Y-m-01', strtotime('-1 month'))
이렇게만 해도 지난 달의 첫 번째 날짜 구할 수 있는거 아니냐? 라고 생각 하실 수도 있습니다. 그런데 문제가 되는건, 해당 월의 마지막 날이 31일까지 있을 경우입니다.
실제로 위 예시처럼 오늘이 2025년 7월 31일인데 date('Y-m-01', strtotime('-1 month'))
이렇게 날짜를 구해보면 2025-07-01
이라는 결과가 나오고 이것은 우리가 원하는 결과물이 아니기 때문에, 조금 복잡하더라도 오늘이 존재하는 달의 첫 번째 날을 기준으로 -1 month
해줘야 더욱 정확한 결과물을 얻을 수 있음을 알 수 있습니다.
다음 달의 마지막 날짜 구하기
이번엔 다음 달의 마지막 날자를 구하는 방법입니다.
$to = date('Y-m-t', strtotime(date( 'Y-m-01' ).' +1 month'));
지난 달의 첫 번째 날짜를 구하는 방법과 유사하게, 현재 월의 첫 번째 날을 먼저 구하고(date( 'Y-m-01' )
), 여기에 +1 month
를 해주고, 그 다음 가장 마지막 날을 구하는 것입니다. 가장 마지막 날을 구하기 위해 날짜 형식을 지정할 때 t
가 사용된 것이 핵심입니다.
만약 기준을 현재 연월의 첫 번째 날이 아닌 그냥 현재 날짜로 했을 때, 만약 오늘이 1월 31일이면 아래와 같이 원하는 결과물이 나오지 않을 수 있습니다.
두 날짜를 구할 때 모두 현재, 또는 특정 연월의 첫 번째 날을 기준으로 계산해야 함을 꼭 기억해야 합니다.
별로 어려운 작업이 아닐 것 같았지만, 은근 신경 쓸 부분이 많아 예상치 못 한 부분에서 오류나 생각지 못 한 결과물이 나올 수 있으니 조심하도록 합시다.
끝.