2017-06-24 12 views
0

2 datetimesの差を秒単位で計算しますが、時間単位でグループ化したいと思います。それはそうでなければなりません。PHP-Carbon Datetime DiffInSecondsと時間単位のグループ化

これは私が2つの日付の間に違いを生じさせる方法です。

$date_diff = $first->created_at->diffInSeconds($second->created_at); 

そして、たとえば初めて

は9時47分20秒で、次の一つは、私はこのように時間によってグループにそれらを必要とする11時47分50秒です。

In 09:00 = 12.40 Minutes 
In 10:00 = 60.00 Minutes 
In 11:00 = 47.50 Minutes 

どうすればいいですか?そして、これについて何を提案しますか?

ありがとうございました

+0

「12.40分」と仮定します。 – lesssugar

+0

違いが不明ですか?結果は間違っているようです。あなたは初めて09:47:20、09:00にそれは47.20または何か他のものがあるはずです –

+0

@SagarGautamその基本私はちょうど時間でグループ化したい複雑で間違っていない –

答えて

0

以下のコードをチェックアウトできます。

開始時刻が<=の場合、期待どおりに動作することに注意してください。

また、ロジックを抽出して機能を分離したり、必要に応じて後端/先行ゼロを追加したりするなど、改善の余地がありますが、開始する必要があります。

$start = '09:47:20'; 
    $end = '11:47:50'; 

    $startTime = Carbon::createFromFormat('H:i:s', $start); 
    $endTime = Carbon::createFromFormat('H:i:s', $end); 

    $startHour = $startTime->hour; // 9 
    $endHour = $endTime->hour; // 11 

    $hourRange = range($startHour, $endHour); // array(9, 10, 11) 

    if (count($hourRange) === 1) { 
     // start and end time share the same hour 
     $hourRange = array($startHour, $endHour); 
    } 

    $lastIndex = count($hourRange) - 1; 
    $diffGrouped = array(); 

    foreach ($hourRange as $index => $hour) { 

     if ($index === 0) { 

      // start hour has the next full hour - calculate the difference 
      $nextFullHour = $startHour + 1; 
      $nextFullHourTime = Carbon::createFromFormat('H', $nextFullHour); 

      $minutes = $startTime->diff($nextFullHourTime)->format('%i.%s'); 

     } else if ($index === $lastIndex) { 

      // end hour is its own "previous full hour" 
      $previousFullHourTime = Carbon::createFromFormat('H', $endHour); 

      $minutes = $endTime->diff($previousFullHourTime)->format('%i.%s'); 

     } else { 

      // everything between the start and the end hour 
      $minutes = '60.00'; 

     } 

     $diffGrouped[] = array(
      'hour' => $hour, 
      'minutes' => $minutes 
     ); 

    } 

    dd($diffGrouped); 

    /* 
    array:3 [ 
      0 => array:2 [ 
      "hour" => 9 
      "minutes" => "12.40" 
      ] 
      1 => array:2 [ 
      "hour" => 10 
      "minutes" => "60.00" 
      ] 
      2 => array:2 [ 
      "hour" => 11 
      "minutes" => "47.50" 
      ] 
     ] 
    */ 
関連する問題