2017-08-23 9 views
0

の日付の間のギャップを見つけよう:たとえば、私は日付の間のギャップを見つけようとしているPHP

$arrayTest = (
       array('from'=>'2017-07-10 15:22:45', 'to'=>'2017-07-11 16:22:46'), 
       array('from'=>'2017-07-11 16:22:47', 'to'=>'2017-08-05 07:10:09'), 
       array('from'=>'2017-08-05 07:10:10', 'to'=>'2017-09-22 09:25:12'), 
       array('from'=>'2017-09-22 09:25:15', 'to'=>'2017-10-18 08:13:58'), 
       array('from'=>'2017-10-18 08:13:58', 'to'=>'2017-11-29 13:29:12') 
); 

この例では、4行目から(2017年9月22日9時25: 15)は、3行目より3行目がから(2017-09-22 09:25:12)になります。私はこれを行う最良の方法は、タイムスタンプstrtotime()に変換していると思うが、私はちょっと混乱している:From - > To ..のグループをチェックする最良の方法はどういうわけか?

出力:この場合、1(またはギャップ数)を返すだけで1つのギャップが発生します。 すべての期間は、接続して、任意の「スペース」が欠落していない場合、あなたがループに必要とのstrtotimeを使っ0

+1

よ、ご希望の出力がありますどのように示すことができるのように見えますか? –

+0

@AlivetoDieこの場合、1(またはギャップ数)を返すだけで1つのギャップが生じます。すべてのピリオドが接続し、_ "space" _を見つけられなかった場合は、0を返します。 –

+2

行1と2の間に1秒のギャップはありませんか? 2および3?それは3を返すでしょうか? – JapanGuy

答えて

3

を返します。

$arr = array(
      array('from'=>'2017-07-10 15:22:45', 'to'=>'2017-07-11 16:22:46'), 
      array('from'=>'2017-07-11 16:22:47', 'to'=>'2017-08-05 07:10:09'), 
      array('from'=>'2017-08-05 07:10:10', 'to'=>'2017-09-22 09:25:12'), 
      array('from'=>'2017-09-22 09:25:15', 'to'=>'2017-10-18 08:13:58'), 
      array('from'=>'2017-10-18 08:13:58', 'to'=>'2017-11-29 13:29:12') 
); 
$gap = false; 
For($i=0; $i<count($arr)-1; $i++){ //I count to -1 due to $i+1 in the calculation below 
    $diff = strtotime ($arr[$i+1]['from']) - strtotime ($arr[$i]['to']); 
    If($diff >1){ // if there is more than one second gap 
     $gap = true; 
     Echo "key " . $i . " to " . ($i+1) .". Missing " .$diff . " seconds"; 
    } 
} 

https://3v4l.org/pNviX

関連する問題