이 글은 PHP의 시간 함수 strtotime() 함수의 원리를 소개합니다. 이는 특정 참조 값을 가지고 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
strtotime을 -1개월, +1개월, 다음달과 결합하면 어떤 사람들은 종종 혼란스러워하며, 이 기능이 약간 신뢰할 수 없다고 느끼고, 사용할 때 종종 문제가 발생합니다...
아니요, 누군가 방금 저에게 다시 물었습니다.
// 今天是2018-07-31 执行代码:date("Y-m-d",strtotime("-1 month"))// 怎么输出是2018-07-01?
알겠습니다. 이 질문은 혼란스러워 보이지만 내부 논리로 볼 때 실제로는 "맞습니다". 걱정하지 마세요. 천천히 이야기해 보겠습니다.
내부 처리를 시뮬레이션해 보겠습니다. 이런 종류의 날짜 논리:
1. 먼저 -1개월을 하고, 현재는 07-31이고, 하나를 빼면 06-31이 됩니다.
2, 그런 다음 날짜를 정규화합니다. 6월에는 31일이 없으므로 2시 60분이 3시와 같듯이 6월 31일은 7월 1일과 같습니다
논리가 매우 "명확"합니까? 다음과 같이 두 번째 단계를 수동으로 확인할 수도 있습니다.
var_dump(date("Y-m-d", strtotime("2017-06-31")));// 输出2017-07-01
즉, 크고 작은 달의 마지막 날과 관련된 한 이러한 혼란이 있을 수 있습니다. 이 결론을 확인하기 위해 유사한 다른 달을 쉽게 확인할 수 있습니다:
var_dump(date("Y-m-d", strtotime("-1 month", strtotime("2017-03-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("+1 month", strtotime("2017-08-31"))));// 输出2017-10-01 var_dump(date("Y-m-d", strtotime("next month", strtotime("2017-01-31"))));// 输出2017-03-03 var_dump(date("Y-m-d", strtotime("last month", strtotime("2017-03-31"))));// 输出2017-03-03
우리는 어떻게 해야 합니까?
PHP5.3부터 date는 이 문제를 명확히 하기 위해 일련의 수정 문구, 즉 "first day of" 및 " 마지막 날”, 즉 날짜가 자동으로 “정규화”되지 않도록 날짜를 제한할 수 있습니다:
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));//输出2017-02-28 var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));////输出2017-09-01 var_dump(date("Y-m-d", strtotime("first day of next month", strtotime("2017-01-31"))));////输出2017-02-01 var_dump(date("Y-m-d", strtotime("last day of last month", strtotime("2017-03-31"))));////输出2017-02-28
그런 다음 5.3 이전 버전인 경우(아직도 사용하는 사람이 있습니까?) mktime 또는 모든 날을 무시하고 싶다. 예를 들어 매월 1일로 제한하면 되지만 첫날을 직접 사용하는 것만큼 우아하지는 않습니다.
이제 내부 원리를 이해했으니 더 이상 당황하지 않으시겠죠?
추천 관련 기사:
php의 isset() 함수와 empty() 함수 분석 및 간단한 비교 php 배열 함수의 동작은 무엇인가요? PHP 배열 기능 적용(코드 포함)
위 내용은 PHP의 시간 함수 strtotime() 함수 원리 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!