카테고리 없음
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 배송완료 상태의 주문이 없습니다.