2011-03-07 3 views
3

내가 계산하려고하는 시작/종료 시간이 있는데 시작 시간 이후 오전 12시 이전에 끝나는 지 확인하는 데 문제가 있습니다. 또한, 시작 시간이 지난 며칠을 계산해야합니다.PHP에서 'Midnights'가 얼마나 많은 'Midnights'가 다른 날짜를 기준으로 계산됩니까?

내가 가지고 : 날짜, 종료 날짜를 시작

내가 필요로하는 무엇을 : - 시작 날짜 지난 종료 날짜가 얼마나 많은 'Midnights'인가?

누구나 이와 같은 작업을 했습니까?

답변

4

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); 
+0

5.2.10을 사용하고 있지만 비슷한 내용을 살펴 보겠습니다. 감사! – wajiw

+0

마지막 줄은 사용할 수없는 것뿐입니다. 5.2 대안으로 답변을 업데이트하고 있습니다. – Jacob

+0

도움을 주셔서 대단히 감사합니다. 구현이 완료되면 답변을 업데이트하겠습니다. – wajiw

관련 문제