티스토리 뷰

Carbon으로 Date 변경시 잘못된 날짜 값으로 노출됨.

기준 날짜에 Month, Date를 추가하여 날짜를 변경하여 호출시 원하는 날짜 값이 노출되지 않음.

$date = carbon::parse('2024-01-31');
// 참고 2024년 2월 마지막 날은 29일
// 기준 날짜에 한달하고 2일 추가하여 날짜 출력하기
// 예상하는 값은 2024-03-02

echo $date->addMonth(1)->addDay(2)->format('Y-m-d');
// 2024-03-04 ?

 

1월에 한달을 더하면 예상되는 날짜는 2월 마지막 날인 02-29일이 값이 나와야하나 03-02일이 출력된다.

이는 Carbon에서 월단위 이상 값을 더할 때 기준일에 무조건 월 단위 값을 더하고, 달력에 날짜 형식에 맞추는(?) 작업이 추가된다.

예를 들어 2024-01-31에 addMonth(1)을 하게 될 경우 2024-02-31이 되고 31일은 존재하지 않아 2024-02-29 에서 29일과 31일에 차이인 2일을 추가로 더한다. 해당되는 부분을 overflow로 정의하고있다. 왜 이렇게 표현하는지는 모르겠다.

해당 부분을 해결하기 위해서 withoutOverflow 함수를 사용하여 원하는 값을 출력하면 된다.

 

해결방안

addMonthWithoutOverflow를 사용하여 해결.

$date = carbon::parse('2024-01-31');

echo $date->addMonthWithoutOverflow(1)->addDay(2)->format('Y-m-d');
// 2024-03-02

 

댓글