2013-05-27 9 views
21

Próbuję uzyskać wartość "DateInterval" PHP w wartości "total minutes". Jak to zdobyć? Wygląda na to, że prosty format ("% i minut") nie działa?pobierz php DateInterval w sumie "minut"

Oto przykładowy kod:

$test = new \DateTime("48 hours"); 
$interval = $test->diff(new \DateTime()); 

Teraz gdy próbuję uzyskać interwał w całkowitej liczby dni, jego porządku:

echo $interval->format('%a total days'); 

To pokazuje 2 dni jak wyjście, które jest całkowicie w porządku. Co próbuję uzyskać, aby uzyskać wartość w "sumie minut", więc próbowałem:

echo $interval->format('%i total minutes'); 

Który nie działa. Każda pomoc doceniona, aby uzyskać pożądany wynik.

+1

Czy możesz wyświetlić bardziej aktualny kod? Na przykład. inicjalizacja, użytkowanie itp. –

+0

Nie sądzę, że jest to możliwe z reguły. Co się stanie, jeśli przerwa wynosi "jeden miesiąc"? –

+0

Proszę napisać swój kod – edwardmp

Odpowiedz

46
abs((new \DateTime("48 hours"))->getTimestamp() - (new \DateTime)->getTimestamp())/60 

To najprostszy sposób, aby uzyskać różnicę w minutach między dwoma DateTime przypadkach.

+0

Dzięki. Też to wymyśliłem, komentując deceze. Dziękujemy za opublikowanie kompletnego rozwiązania. – Rana

+14

Tak, ten facet z deceze, jest wspaniały ...; o) – deceze

+1

Tęskniłem za tym, że to ty: D – Rana

8

Jeśli utkniesz w miejscu, w którym wszystko co masz to DateInterval, a ty (jak ja) odkryjesz, że wydaje się, że nie ma sposobu na uzyskanie całkowitych minut, sekund lub dowolnego przedziału, rozwiązaniem jest utworzyć DateTime przy zerowym czasie, dodać odstęp do niego, a następnie uzyskać wynikowy timestamp:

$timeInterval  = //the DateInterval you have; 
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($timeInterval)->getTimeStamp(); 
$intervalInMinutes = $intervalInSeconds/60; // and so on 
4

napisałem dwie funkcje, które po prostu oblicza się totalTime od a DateInterval. Dokładność można zwiększyć, biorąc pod uwagę lata i miesiące.

function getTotalMinutes(DateInterval $int){ 
    return ($int->d * 24 * 60) + ($int->h * 60) + $int->i; 
} 

function getTotalHours(DateInterval $int){ 
    return ($int->d * 24) + $int->h + $int->i/60; 
} 
+0

Możesz użyć '$ int-> dni * 24', aby uwzględnić poprzednie obliczenia lub lata. – fyrye

2

To działa idealnie.

function calculateMinutes(DateInterval $int){ 
    $days = $int->format('%a'); 
    return ($days * 24 * 60) + ($int->h * 60) + $int->i; 
}