>  기사  >  백엔드 개발  >  PHP의 시간 함수 strtotime() 함수 원리 설명

PHP의 시간 함수 strtotime() 함수 원리 설명

不言
不言원래의
2018-08-06 15:01:152340검색

이 글은 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

php의 isset() 함수와 empty() 함수 분석 및 간단한 비교 php 배열 함수의 동작은 무엇인가요? PHP 배열 기능 적용(코드 포함)

위 내용은 PHP의 시간 함수 strtotime() 함수 원리 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.