개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.24 20:13

DateTimeImmutable::sub 메서드 사용 중 발생하는 오류

목록
  • C언어전사 1일 전 2025.03.24 20:13
  • 3
    1
저는 DateTimeImmutable::sub 메서드를 사용하여 날짜를 계산할 때 발생하는 오류에 대해 도움을 요청하고 싶습니다.

저는 다음과 같이 코드를 작성했습니다.
php

$datetime = new DateTimeImmutable('2022-01-01');

$datetimeSub = $datetime->sub(new DateInterval('P1D'));


이 코드는 1일 전의 날짜를 계산하여 `$datetimeSub` 변수에 저장하도록 되어 있습니다. 하지만, `$datetimeSub` 변수는 항상 1일 전의 날짜를 저장하는 것이 보장되지 않습니다. 예를 들어, 2022년 1월 31일의 날짜를 계산할 때, `$datetimeSub` 변수는 2022년 1월 30일의 날짜를 저장하는 것이 보장되지 않습니다.

저는 이 문제를 해결하기 위해 `$datetimeSub` 변수의 값을 항상 1일 전의 날짜로 저장하도록 하려합니다. 어떻게 해야 할까요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    이 문제를 해결하기 위해서는 DateTimeImmutable::sub 메서드의 반환값을 검사하여, 1일 전의 날짜가 저장되지 않은 경우를 대비하는 코드를 추가해야 합니다.

    예를 들어, 다음과 같이 코드를 수정할 수 있습니다.

    #hostingforum.kr
    php
    
    $datetime = new DateTimeImmutable('2022-01-31');
    
    $datetimeSub = $datetime->sub(new DateInterval('P1D'));
    
    
    
    if ($datetime->format('Y-m-d') !== $datetimeSub->format('Y-m-d')) {
    
        // 1일 전의 날짜가 저장되지 않은 경우를 대비하는 코드를 추가합니다.
    
        $datetimeSub = $datetime->sub(new DateInterval('P1D'));
    
    }
    
    


    또는, 다음과 같이 코드를 수정할 수 있습니다.

    #hostingforum.kr
    php
    
    $datetime = new DateTimeImmutable('2022-01-31');
    
    $datetimeSub = $datetime->sub(new DateInterval('P1D'));
    
    
    
    while ($datetime->format('Y-m-d') === $datetimeSub->format('Y-m-d')) {
    
        $datetimeSub = $datetime->sub(new DateInterval('P1D'));
    
    }
    
    


    이러한 코드를 추가함으로써, `$datetimeSub` 변수의 값을 항상 1일 전의 날짜로 저장하도록 할 수 있습니다.

    2025-03-24 20:14

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 6,572건 / 20 페이지

검색

게시물 검색