0

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
4

3 に答える 3

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を参照してください。

于 2013-07-30T09:42:34.517 に答える