PHP 5.3을 사용합니다. 이전 버전 인 경우 유닉스 타임 스탬프를 사용하여 차이점을 찾아야 할 수 있습니다. 미드 나이트의 수는 시작 시간과 종료 시간이 같은 시간을 가진다고 가정 할 때 일 수 차이가되어야합니다. 그러므로 둘 다 현재 날짜의 자정으로 설정하면 setTime(0,0)
, 계산이 정확해야합니다.
DateTime 개체 사용 시작과 끝 사이에 24 시간 미만이 있기 때문에
$start = new DateTime('2011-03-07 12:23:45');
$end = new DateTime('2011-03-08 1:23:45');
$start->setTime(0,0);
$end->setTime(0,0);
$midnights = $start->diff($end)->days;
setTime()
전화를 사용하지 않고,이 0이 발생할 것입니다.
setTime()
을 사용하면이 차이는 정확히 24 시간이므로 1이됩니다.
diff()
함수는 5.3에서 DateInterval 클래스와 함께 도입되었습니다. 5.2에서는 여전히 DateTime 클래스를 사용할 수 있지만 Unix 타임 스탬프를 사용하여 총 일을 계산해야합니다.
$midnights = ($end->format('U') - $start->format('U'))/86400
당신은 문제가되지 않습니다 시작/종료의 순서에 abs()
기능에 그것을 포장 할 수 있습니다.
참고 : DST가 관련된 경우이 기능을 테스트해야 할 수 있습니다.
php date documentation의 주석은 DST와 관련된 문제를 해결하기 위해 86400 (하루의 초 수)으로 나눈 값을 사용합니다.
DateTimes를 사용하는 또 다른 방법은 UTC로 작성하는 것입니다.
$utcTimezone = new DateTimeZone('UTC');
$start = new DateTime('2011-03-07 12:23:45', $utcTimezone);
$end = new DateTime('2011-03-08 1:23:45', $utcTimezone);
5.2.10을 사용하고 있지만 비슷한 내용을 살펴 보겠습니다. 감사! – wajiw
마지막 줄은 사용할 수없는 것뿐입니다. 5.2 대안으로 답변을 업데이트하고 있습니다. – Jacob
도움을 주셔서 대단히 감사합니다. 구현이 완료되면 답변을 업데이트하겠습니다. – wajiw