2013-05-27 67 views
21

我試圖在「總分鐘」值中獲取PHP「DateInterval」值。如何得到它?看起來像簡單的格式(「%i分鐘」)不起作用?獲取php DateInterval總計'分鐘'

下面是示例代碼:

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

現在,如果我嘗試獲得總天數區間,其罰款:

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

據顯示2天作爲輸出,這完全是精細。我試圖讓,如果得到的「總分鐘」的價值,所以我嘗試:

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

這是行不通的。任何幫助感激,以獲得我想要的輸出。

+1

你能展示一些更實際的代碼?例如。初始化,使用等 –

+0

我不認爲這是可能的一般規則。如果間隔時間是「一個月」呢? –

+0

請發佈您的代碼 – edwardmp

回答

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

這讓兩個DateTime實例之間的分鐘差的最簡單的方法。

+0

謝謝。我認爲這一點也與欺騙的評論。感謝您發佈完整的解決方案。 – Rana

+14

是的,這個騙子,他很棒......; o) – deceze

+1

我錯過了它是你:D – Rana

8

如果你被困在一個只有DateInterval的位置,並且你(像我)發現似乎沒有辦法得到總分鐘數,秒數或任何間隔,解決方案是在零時間創建一個日期時間,間隔添加到它,然後得到結果時間戳:

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

我寫的只是計算從DateInterval的TOTALTIME兩種功能。 準確性可以通過考慮年份和月份來增加。

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

你可以使用'$ int-> days * 24'來計算前幾個月或者幾年。 – fyrye

2

完美地工作。

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