PHP strtotime BUG 다루기

coldplay.xixi
풀어 주다: 2023-04-08 19:04:01
앞으로
3809명이 탐색했습니다.

PHP strtotime BUG 다루기

PHP strtotime의 버그 처리

최근 -1month, +1month,nextmonth와 결합하여 strtotime을 사용하여 이전 달 또는 다음 달의 날짜를 가져오는데 방금 기사를 보고 깨달았습니다. 원본 strtotime을 사용하여 날짜를 직접 가져오는 데 여전히 작은 버그가 있습니다

BUG

예를 들어 date:

$today = '2020-12-31';
echo date("Y-m-d",strtotime("$today -1 month"))
로그인 후 복사

Output

2020-12-01
로그인 후 복사

위 출력에 따르면 여전히 출력이 유지되는 것을 볼 수 있습니다. 2020년 12월

분석:

먼저 Do -1개월, 현재 시간은 07-31이고, 하나를 빼면 06-31이다.

6월에는 31일이 없기 때문에 다시 날짜 정규화를 하라. , 2시 60분은 3시와 같으며 6월 31일은 7월 1일과 같습니다

논리가 매우 "명확"합니까? 다음과 같이 두 번째 단계를 수동으로 확인할 수도 있습니다.

var_dump(date("Y-m-d", strtotime("2020-12-31")));
// 输出2020-12-01
로그인 후 복사

즉 , 크고 작은 달의 마지막 날이 포함되는 한 이러한 혼란이 있을 수 있습니다. 다른 달도 비슷한지 쉽게 확인할 수 있으며 다음 결론을 확인할 수 있습니다.

var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2020-12-31"))));
// 输出2020-12-03
 
var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2020-08-31"))));
// 输出2020-10-01
 
var_dump(date("Y-m-d", strtotime("next month", strtotime("2020-01-31"))));
// 输出2020-03-03
 
var_dump(date("Y-m-d", strtotime("last month", strtotime("2020-03-31"))));
// 输出2020-03-03
로그인 후 복사

Solution

PHP5.3부터 시작, 날짜 이 문제를 명확히 하기 위해 일련의 정정 문구, 즉 "첫 번째 날"과 "마지막 날"을 추가했습니다. 즉, 날짜가 자동으로 "정규화"되지 않도록 날짜를 제한할 수 있습니다:

var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2020-03-31"))));
//输出2020-02-28
 
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2020-08-31"))));
//输出2020-09-01
 
var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2020-01-31"))));
//输出2020-02-01
 
var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2020-03-31"))));
//输出2020-02-28
로그인 후 복사

If 5.3 이전 버전이므로 mktime 등을 사용하여 모든 날짜를 무시할 수 있습니다. 예를 들어 매월 1일로 제한하면 충분하지만 첫날을 직접 사용하는 것만큼 우아하지는 않습니다

. 추천 튜토리얼: "PHP 비디오 튜토리얼"

위 내용은 PHP strtotime BUG 다루기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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