/
PHP Carbon 달을 더하거나 뺄때 오버플로우(overflow)되지 않게 하기

PHP Carbon 달을 더하거나 뺄때 오버플로우(overflow)되지 않게 하기


Carbon 에 addMonth() 나 subMonth() 로 특정 달을 구하고 그 달의 첫째나 마지막 날을 구해야 하는 경우가 있습니다.

예로 매달 마지막 날에 정기 결제가 이뤄질 경우 현재 달이 2월이면 다음 달의 마지막을 구해서 스케줄러에 등록하고 결제 처리를 할 수 있습니다.

$m = Carbon\Carbon::parse('2021-02-01');
var_dump($m->addMonth()->lastOfMonth()->format('Y-m-d'));

// string(10) "2021-03-31"


하지만 다음 코드를 실행하면 의도와는 다르게 2월이 아닌 3월의 마지막 날이 출력되므로 정기 결제가 안 되는 큰 문제가 발생할 수 있습니다.

$m = Carbon\Carbon::parse('2021-01-31');
var_dump($m->addMonth()->lastOfMonth()->format('Y-m-d'));

// string(10) "2021-03-31"


이런 문제를 해결하기 위해 Carbon 2.x 부터는 addMonthNoOverflow(), subMonthNoOverflow() 같이 NoOverflow 가 붙는 메서드가 있고 이를 사용하면 달이 오버플로우되는 문제를 해결할 수 있습니다.


$m = Carbon\Carbon::parse('2021-01-31');
var_dump($m->addMonthNoOverflow()->lastOfMonth()->format('Y-m-d'));

// string(10) "2021-02-28"

Ref

Related content

PHP Carbon 라이브러리로 날짜/시간 처리하기
PHP Carbon 라이브러리로 날짜/시간 처리하기
More like this
소스 코드를 예쁘게 포맷팅하고 공유할 수 있게 해주는 carbon-app 서비스
소스 코드를 예쁘게 포맷팅하고 공유할 수 있게 해주는 carbon-app 서비스
More like this
PHP Carbon 을 사용해서 Unix Timestamp 형식을 Date time 형식으로 변경하기
PHP Carbon 을 사용해서 Unix Timestamp 형식을 Date time 형식으로 변경하기
More like this
Confluence Cloud 사이트 공지 메시지 띄우기
Confluence Cloud 사이트 공지 메시지 띄우기
More like this
cron 에서 초 단위로 스케줄링하기
cron 에서 초 단위로 스케줄링하기
More like this
yum-cron 으로 시스템 자동 업데이트
yum-cron 으로 시스템 자동 업데이트
More like this