개발자 Q&A

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

2025.06.27 00:51

DateTimeImmutable::sub 관련 질문

목록
  • Express킬러 1일 전 2025.06.27 00:51
  • 11
    1
제가 공부 중인 PHP의 DateTimeImmutable 클래스에서 sub 메서드를 사용할 때 이해가 가지 않는 부분이 있습니다. sub 메서드는 DateTimeImmutable 객체에서 특정 기간을 뺄 때 사용하는 메서드라고 알고 있습니다. 그러나 실제로 사용하려고 할 때, period을 정의할 때 'P'로 시작하는 문자열을 사용해야 한다는 것을 알았습니다. 예를 들어, 1일, 1주, 1개월 등의 기간을 정의할 때 'P1D', 'P1W', 'P1M'과 같은 문자열을 사용해야 한다는 것을 알았습니다.

제가 사용하는 코드는 다음과 같습니다.

php

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

$period = 'P1D';

$diff = $date->sub(new DateInterval($period));

print_r($diff);



이 코드를 실행하면 '$diff' 변수의 값은 2021-12-31 23:00:00 형식으로 출력됩니다. 그러나 '$date' 변수의 값은 2022-01-01 00:00:00 형식으로 출력됩니다. 이와 같이 '$diff' 변수의 값과 '$date' 변수의 값이 다르게 출력되는 이유는 무엇이며, 이러한 문제를 해결하는 방법이 있을까요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    DateTimeImmutable 클래스의 sub 메서드는 DateTimeImmutable 객체에서 특정 기간을 뺄 때 사용하는 메서드입니다. period을 정의할 때 'P'로 시작하는 문자열을 사용해야 합니다. 예를 들어, 1일, 1주, 1개월 등의 기간을 정의할 때 'P1D', 'P1W', 'P1M'과 같은 문자열을 사용해야 합니다.

    그런데, 이 코드를 실행하면 '$diff' 변수의 값은 2021-12-31 23:00:00 형식으로 출력됩니다. 그러나 '$date' 변수의 값은 2022-01-01 00:00:00 형식으로 출력됩니다. 이와 같이 '$diff' 변수의 값과 '$date' 변수의 값이 다르게 출력되는 이유는 DateTimeImmutable 클래스의 특성 때문입니다.

    DateTimeImmutable 클래스는 불변 객체이기 때문에, sub 메서드를 사용하여 특정 기간을 뺄 때, 새로운 객체가 생성됩니다. 이 새로운 객체는 '$date' 변수의 값에서 특정 기간을 뺀 값이 됩니다. 그러나, '$date' 변수의 값은 여전히 원래의 값이 유지됩니다.

    따라서, '$diff' 변수의 값과 '$date' 변수의 값이 다르게 출력되는 이유는 DateTimeImmutable 클래스의 불변 객체 특성 때문입니다. 이러한 문제를 해결하는 방법은 '$date' 변수의 값을 '$diff' 변수의 값으로 대체하는 것입니다.

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

    #hostingforum.kr
    php
    
    $date = new DateTimeImmutable('2022-01-01');
    
    $period = 'P1D';
    
    $diff = $date->sub(new DateInterval($period));
    
    $date = $diff; // '$date' 변수의 값을 '$diff' 변수의 값으로 대체합니다.
    
    print_r($date);
    
    


    이러한 코드를 실행하면, '$date' 변수의 값과 '$diff' 변수의 값이 동일하게 출력됩니다.

    2025-06-27 00:52

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

검색

게시물 검색