카테고리 없음

Carbon 클래스와 CarbonImmutable 클래스 차이 (날짜 라이브러리)

Sein_ 2024. 8. 31. 22:34
728x90

Carbon (가변적)

- 호출시 하나의 인스턴스 변경해서 사용

- 예를 들어, addDays 같은 메서드를 호출하면, 해당 메서드는 원래 객체의 값을 변경

 

CarbonImmutable (불변적)

- 호출시 수정할 때마다 새로운 인스턴스를 사용

- 객체를 생성한 후 상태를 변경하는 것이 불가능, 메서드를 호출할 때마다 변경된 값을 가진 새로운 인스턴스를 반환

 

----

코드를 카피하던 중, CarbonImmutable 클래스를 사용한 코드를 보게 되었다

Carbon 클래스와 CarbonImmutable 클래스의 차이를 몰랐기에 그냥 Carbon 으로 카피해서 사용했는데

조회한 날짜가 startOfDay ~ endOfDay 가 아닌 endOfDay 만 적용된 값으로 나왔다

 

- 수정 전 코드

for ($i = $start; $i <= $end; $i++) {
            $targetDay = Carbon::parse($i . 'days');
            if ($this->option('intervals')) {
                $startDay = $targetDay->subMinutes($this->option('intervals'));
                $endDay = $targetDay;
            } else {
                $startDay = $targetDay->startOfDay();
                $endDay = $targetDay->endOfDay();
            }
            ...

 

- 결과

 

2024-08-24 23:59:59부터 2024-08-24 23:59:59까지 조회합니다
2024-08-24 배송완료 상태의 주문이 없습니다.

 

- 수정

# $targetDay = Carbon::parse($i . 'days');
  $targetDay = CarbonImmutable::parse($i . 'days');

 

- 수정 후 결과

2024-08-24 00:00:00부터 2024-08-24 23:59:59까지 조회합니다
2024-08-24 배송완료 상태의 주문이 없습니다.