티스토리 뷰

반응형

Carbon::createFromFormat()을 사용해 "2월" 날짜를 생성할 때, 유효하지 않은 날짜를 넣으면 자동으로 "3월"로 넘어가는 현상이 발생할 수 있습니다. 이는 PHP의 DateTime 클래스가 자동 보정(auto correction) 을 하기 때문입니다.

예시:

use Carbon\Carbon;

$date = Carbon::createFromFormat('Y-m-d', '2025-02-30');
echo $date; // 출력: 2025-03-02

 

2월 30일은 존재하지 않기 때문에, PHP는 이를 3월 2일로 보정합니다.


반응형

✅ 해결 방법

1. 유효한 날짜인지 확인하기

Carbon::createFromFormat() 후 ->format() 값이 입력값과 일치하는지 비교합니다:

use Carbon\Carbon;

$input = '2025-02-30';
$date = Carbon::createFromFormat('Y-m-d', $input);

if ($date && $date->format('Y-m-d') === $input) {
    echo "유효한 날짜입니다: $date";
} else {
    echo "❌ 유효하지 않은 날짜입니다.";
}

또는 
$input = "2025-02";
Carbon::createFromFormat('Y-m-d', $input . "-01")->format('Ym');

2. 예외 발생시키기 (CarbonImmutable 또는 예외 처리)

Carbon은 기본적으로 예외를 던지지 않지만, 직접 예외 처리할 수 있습니다:

try {
    $date = Carbon::createFromFormat('Y-m-d', '2025-02-30');
    if ($date->format('Y-m-d') !== '2025-02-30') {
        throw new Exception('날짜가 자동 보정되었습니다.');
    }
    echo $date;
} catch (Exception $e) {
    echo "에러: " . $e->getMessage();
}

🔍 요약

  • Carbon::createFromFormat()은 잘못된 날짜를 자동 보정합니다.
  • 날짜 유효성 검사를 직접 해야 함.
  • ->format() 값 비교 또는 예외 처리로 문제 방지 가능.
반응형

'배움 > PHP' 카테고리의 다른 글

Laravel 11 Validator::make  (0) 2025.05.13
artisan 명령어  (0) 2025.05.08
PHP strict_types 기능  (0) 2025.04.29
PHP collect 함수와 예제들  (0) 2025.04.28
Laravel 11 Eloquent: Relationships 연관관계  (0) 2025.04.25
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함