PHP DateTime::modify 메소드를 사용하여 월을 더하고 뺄 수 있습니다.
P粉046387133
P粉046387133 2023-08-06 18:43:52
0
2
587
<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粉046387133
P粉046387133

모든 응답(2)
P粉709307865

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

으아악

출력은 다음과 같습니다:

으아악
P粉030479054

이것이 버그가 아닌 이유:

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

+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이 됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿