2013-07-30 29 views
0

差異正在返回一個不正確的值,不正確的意思是它不是預期的。我需要它返回總分鐘數,例如1小時7分鐘需要67分鐘。diff爲什麼會返回不正確的值?

<?php 
// Trouble-shoot why time is being calculate incorrectly at 7 minutes when 
// it should be 67 minutes for total travel time. 

date_default_timezone_set('America/New_York'); 
// Display the total travel time in minutes for a trip. 

    $depart = "10:31:00 07/30/2013"; 
    $arrival = "7/30/2013 11:38:00 AM"; 

    echo "depart time is: " . $depart . "\n"; 
    echo "arrival time is: " . $arrival . "\n"; 
    $depart_raw = DateTime::createFromFormat("H:i:s m/d/Y", $depart); 
    $arrival_raw = DateTime::createFromFormat("m/d/Y g:i:s a", $arrival); 
    var_dump($depart_raw); 
    var_dump($arrival_raw); 
    $interval = $depart_raw->diff($arrival_raw); 
    var_dump($interval); 
    echo "Total travel time is: " . $interval->format("%i")." minutes" . "\n"; 

?> 

輸出:

depart time is: 10:31:00 07/30/2013 
arrival time is: 7/30/2013 11:38:00 AM 
object(DateTime)#1 (3) { 
    ["date"]=> 
    string(19) "2013-07-30 10:31:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(16) "America/New_York" 
} 
object(DateTime)#2 (3) { 
    ["date"]=> 
    string(19) "2013-07-30 11:38:00" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(16) "America/New_York" 
} 
object(DateInterval)#3 (8) { 
    ["y"]=> 
    int(0) 
    ["m"]=> 
    int(0) 
    ["d"]=> 
    int(0) 
    ["h"]=> 
    int(1) 
    ["i"]=> 
    int(7) 
    ["s"]=> 
    int(0) 
    ["invert"]=> 
    int(0) 
    ["days"]=> 
    int(0) 
} 
Total travel time is: 7 minutes 

回答

4

你會得到一個正確的間隔,但是,你只顯示它的「分鐘」的一部分,而不是小時。 var_dump($interval)看看我的意思 - 總間隔時間是1小時7分鐘。

你的錯誤是假設%i格式會給你67分鐘 - 它不會。你可以使用像這樣計算的話:

$minutes= 
    $interval->format("%a")*24*60 + //total days 
    $interval->format("%H")*60 + //hours 
    $interval->format("%i");  //minutes 

http://www.php.net/manual/en/dateinterval.format.php

+0

謝謝,我更新了它。 – Edward

+0

那麼,現在你看到了嗎? –

+0

那麼如何顯示總分鐘數,例如67分鐘?謝謝! – Edward

0
echo "Total travel time is: " .$interval->format("%h") ." hours and " . $interval->format("%i")." minutes" . "\n"; 

你只顯示分鐘,而不是小時。它將分鐘轉換爲小時並將它們存儲在數組的不同部分。

["h"]=> 
    int(1) 

    ["i"]=> 
    int(7) 

在這種情況下,只是做:

echo "Total travel time is: " . ($interval->format("%i")+($interval->format("%h")*60))." minutes" . "\n"; 
+0

我更新了它(請參閱上文)。我需要總分鐘數,例如1小時7分鐘需要67分鐘。 – Edward

1

這將輸出結果,你預期

$traveltime = 60 * $interval->format("%H") + $interval->format("%i"); 
echo "Total travel time is: " . $traveltime . " minutes" . "\n";` 
相關問題