> 백엔드 개발 > PHP 튜토리얼 > 월을 더하거나 뺄 때 PHP DateTime::modify가 예기치 않은 결과를 생성하는 이유는 무엇입니까?

월을 더하거나 뺄 때 PHP DateTime::modify가 예기치 않은 결과를 생성하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-05 08:22:13
원래의
484명이 탐색했습니다.

Why Does PHP DateTime::modify Produce Unexpected Results When Adding or Subtracting Months?

PHP DateTime::modify 월별 이상 현상 이해

PHP DateTime::modify 함수는 월을 더하거나 빼는 데 사용됩니다. 예상치 못한 결과를 초래할 수 있습니다. 그 이유는 PHP의 날짜 조작 메커니즘의 고유한 동작에서 비롯됩니다.

버그가 아닌 이유

내부적으로 월을 더하거나 뺄 때 PHP는 증가하거나 감소합니다. 월 번호(예: 1개월은 월 번호를 1씩 증가시킵니다.) 그러나 결과 달의 실제 일수는 확인하지 않습니다. 결과적으로 결과 달의 일수가 원래 날짜보다 적으면 PHP는 다음 달 1일부터 남은 일수를 계산하여 날짜를 자동으로 수정합니다.

질문에 제공된 예를 고려하세요.

$date = new DateTime('2000-12-31');

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n"; // Output: 2001-01-31

$date->modify('+1 month');
echo $date->format('Y-m-d') . "\n"; // Output: 2001-03-03
로그인 후 복사

이 예에서 처음에 1개월을 추가하면 날짜가 2001-02-31이 됩니다. 그러나 2001년 2월은 28일만 있으므로 PHP는 날짜를 31일인 3월 3일로 자동 수정합니다.

원하는 행동을 위한 솔루션

날짜를 1개월 앞당겨 다음 달 1일로 앞당기는 예상 동작은 다음과 같습니다. 전략:

  • 다음 달 수동 확인: 결과 달의 날짜를 반복하고 원하는 날짜가 있는지 확인합니다. 그렇지 않은 경우 다음 달 1일로 건너뜁니다.
  • PHP 5.3의 상대 시간 스탠자: PHP 5.3에 도입된 구문의 첫 번째 날을 활용하여 수정이 진행되어야 함을 명시적으로 지정합니다. 다음 달 1일까지의 날짜(예: $date->modify('다음 달 1일) 월')).

위 내용은 월을 더하거나 뺄 때 PHP DateTime::modify가 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿