Diff返回的值不正确,不正确意味着它不是预期的值。我需要它返回总分钟,例如1小时7分钟需要67分钟。
<?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
答案 0 :(得分: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
答案 1 :(得分:1)
这将输出您期望的结果
$traveltime = 60 * $interval->format("%H") + $interval->format("%i");
echo "Total travel time is: " . $traveltime . " minutes" . "\n";`
答案 2 :(得分: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";