찾다

 >  Q&A  >  본문

PHP DateTime::modify 메소드를 사용하여 월을 더하고 뺄 수 있습니다.

<p>저는 DateTime 클래스를 많이 사용해 왔으며 최근에 개월 수를 추가할 때 버그라고 생각했던 것을 만났습니다. 약간의 조사 후에 이것이 실제로 버그가 아니며 예상대로 작동한다는 것이 발견되었습니다. 여기에 있는 문서에 따르면: </p> <인용문> <p>예제 #2 또는 추가할 때 주의하세요. 개월 빼기</p> </인용문> <pre class="brush:php;toolbar:false;"><?php $date = new DateTime('2000-12-31'); $date->modify('+1개월'); echo $date->format('Y-m-d') . $date->modify('+1개월'); echo $date->format('Y-m-d') . ?></pre> <인용문> <pre class="brush:php;toolbar:false;">위 예제는 다음을 출력합니다: 2001-01-31 2001-03-03</pre> </인용문> <p>이것이 버그로 간주되지 않는 이유를 설명할 수 있는 사람이 있습니까? <br /><br />또한 +1개월이 설계된 대로가 아니라 예상대로 작동하도록 이 문제를 해결하는 우아한 솔루션이 있는 사람이 있나요?


P粉046387133P粉046387133474일 전589

모든 응답(2)나는 대답할 것이다

  • P粉709307865

    P粉7093078652023-08-07 13:27:57

    이것은 복제본을 생성하지 않고 개체를 직접 수정하기 위해 DateTime 메서드를 완전히 사용하는 또 다른 깔끔한 솔루션입니다.

    으아악

    출력은 다음과 같습니다:

    으아악

    회신하다
    0
  • P粉030479054

    P粉0304790542023-08-07 09:48:12

    이것이 버그가 아닌 이유:

    현재 동작은 정확합니다. 내부적으로 일어나는 일은 다음과 같습니다.

    +1 월은 월(원래 1)을 1씩 증가시킵니다. 그러면 날짜가 2010-02-31로 변경됩니다.

    2010년 2월은 28일밖에 없었기 때문에 PHP는 자동으로 이 문제를 수정하고 2월 1일부터 계속해서 일수를 계산합니다. 그래서 우리가 얻은 최종 날짜는 3월 3일이었습니다.

    원하는 결과를 얻는 방법:
    원하는 결과를 얻으려면 다음 달을 수동으로 확인한 후 다음 달의 일수를 추가하면 됩니다.

    이 코드를 직접 작성할 수 있기를 바랍니다. 나는 단지 구체적인 단계를 제공할 뿐입니다.

    PHP 5.3 접근 방식:
    올바른 동작을 얻으려면 PHP 5.3에 도입된 상대 시간 문 "첫 번째 날"을 사용할 수 있습니다. 이 명령문은 "다음 달", "5번째 달" 또는 "+8개월"과 함께 사용하여 지정된 달의 1일로 이동할 수 있습니다. 현재 사용하는 "+1 월" 대신 다음 코드를 사용하여 다음 달의 첫날을 가져올 수 있습니다.

    으아아아

    이 스크립트는 2월을 올바르게 출력합니다. PHP가 다음 달의 첫 번째 날 명령문을 처리하면 다음과 같은 일이 발생합니다.

    다음 달은 월(원래 1)을 1씩 증가시킵니다. 그러면 날짜가 2010-02-31로 변경됩니다.

    첫번째 날은 날짜의 일수를 1로 설정하여 날짜가 2010-02-01이 됩니다.

    회신하다
    0
  • 취소회신하다