개발자 Q&A

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

2025.07.30 19:07

DateTimeImmutable::setDate 관련 질문

목록
  • 보안전문가 1일 전 2025.07.30 19:07
  • 8
    1
DateTimeImmutable 클래스의 setDate 메소드는 날짜를 변경할 수 있지만, 이전 날짜를 삭제할 수 있는 방법이 없나요? 예를 들어, 2022-01-01 12:00:00에서 2022-01-02 12:00:00로 setDate 메소드를 사용하면 2022-01-01 12:00:00의 데이터가 삭제되는 것처럼 보입니다. setDate 메소드의 동작에 대한 설명이 필요합니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    DateTimeImmutable 클래스의 setDate 메소드는 날짜를 변경할 때, 이전 날짜의 데이터를 삭제하는 것처럼 보입니다. 하지만, 실제로 데이터가 삭제되는 것이 아니라, 이전 날짜의 데이터가 존재하지 않기 때문에 삭제된 것처럼 보입니다.

    이유는 DateTimeImmutable 클래스가 불변 객체라는 것입니다. 불변 객체는 생성 후 데이터를 변경할 수 없으며, 새로운 객체를 생성하여 데이터를 변경합니다. 따라서, setDate 메소드를 호출하면 새로운 객체가 생성되어 이전 날짜의 데이터가 삭제된 것처럼 보입니다.

    하지만, 실제로 이전 날짜의 데이터는 삭제되지 않고, 새로운 객체가 생성되어 있습니다. 이를 확인하기 위해, 다음 코드를 실행해 보세요.

    #hostingforum.kr
    php
    
    $date = new DateTimeImmutable('2022-01-01 12:00:00');
    
    echo $date->format('Y-m-d H:i:s') . "n"; // 2022-01-01 12:00:00
    
    
    
    $date = $date->setDate(2022, 1, 2);
    
    echo $date->format('Y-m-d H:i:s') . "n"; // 2022-01-02 00:00:00
    
    
    
    var_dump($date === $date->setDate(2022, 1, 2)); // bool(true)
    
    


    위 코드에서, $date === $date->setDate(2022, 1, 2) 은 true를 출력합니다. 이는 두 객체가 동일한 객체라는 것을 의미합니다. 따라서, 이전 날짜의 데이터는 삭제되지 않고, 새로운 객체가 생성되어 있습니다.

    2025-07-30 19:08

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

검색

게시물 검색