[PHP] 지난 달의 첫 째 날짜와 다음 달의 마지막 날짜를 구하는 방법

folder 프로그래밍 calendar_month web_traffic 0

문제

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일까지 있을 경우입니다.

PHP 에서 7월 31일에 “-1 month”를 하면 7월 1일을 반환합니다.

실제로 위 예시처럼 오늘이 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일이면 아래와 같이 원하는 결과물이 나오지 않을 수 있습니다.

PHP에서 1월 31일에 “+1 month”를 하면, 2월이 아닌 3월을 반환함


두 날짜를 구할 때 모두 현재, 또는 특정 연월의 첫 번째 날을 기준으로 계산해야 함을 꼭 기억해야 합니다.

별로 어려운 작업이 아닐 것 같았지만, 은근 신경 쓸 부분이 많아 예상치 못 한 부분에서 오류나 생각지 못 한 결과물이 나올 수 있으니 조심하도록 합시다.

끝.

댓글 남기기