间隔5分钟

我正在尝试分隔日期,例如:


$arr=array(

    "2018-06-27 20:30:20",

    "2018-06-27 20:31:20",

    "2018-06-27 20:37:20",

    "2018-06-27 20:45:20",

    "2018-06-27 20:48:20"

);

正如您所看到的,分钟之间的差异只有 1 分钟甚至几秒钟。


我想要完成的是强制日期为 5 分钟间隔。


示例输出


 2018-06-27 20:30:00

 2018-06-27 20:35:00

 2018-06-27 20:40:00

 2018-06-27 20:45:00

 2018-06-27 20:50:00

这是我的代码


function roundToNearestMinuteInterval($time)

{

   $time = (round(strtotime($time) / 300)) * 300;

   return date('Y-m-d H:i:s', $time);

}


$temp="";

$wave=1;


foreach($arr as $a) {

   if(empty($temp)) {

       $temp= roundToNearestMinuteInterval($a);

   }


   $date= roundToNearestMinuteInterval($a);


   if($temp==$date && $wave!=1){

      $new=date('Y-m-d H:i:s',strtotime('+3 minutes',strtotime($a)));

      $date= roundToNearestMinuteInterval($date);

      $temp= $date;

   }   


   $wave++;

   echo $date."<br/>";

}


三国纷争
浏览 135回答 2
2回答

30秒到达战场

如果您想要一个输出数组,其中包含输入数组中最早和最晚时间之间的所有 5 分钟(或其他间隔)时间,您可以在它们之间进行迭代,在每个循环中添加间隔:$arr=array("2018-06-27 20:30:20","2018-06-27 20:31:20","2018-06-27 20:37:20","2018-06-27 20:45:20","2018-06-27 20:48:20");function roundToNearestMinuteInterval($time, $interval) {&nbsp; &nbsp; $timestamp = strtotime($time);&nbsp; &nbsp; $rounded = round($timestamp / ($interval * 60), 0) * $interval * 60;&nbsp; &nbsp; return $rounded;}$interval = 5; // minutes$start = roundToNearestMinuteInterval(min($arr), $interval);$end = roundToNearestMinuteInterval(max($arr), $interval);for (; $start <= $end; $start += $interval * 60) {&nbsp; &nbsp; $results[] = date('Y-m-d H:i:s', $start);}print_r($results);输出:Array(&nbsp; &nbsp; [0] => 2018-06-27 20:30:00&nbsp; &nbsp; [1] => 2018-06-27 20:35:00&nbsp; &nbsp; [2] => 2018-06-27 20:40:00&nbsp; &nbsp; [3] => 2018-06-27 20:45:00&nbsp; &nbsp; [4] => 2018-06-27 20:50:00)

慕桂英4014372

具有 DateTime 扩展名 dt ( https://github.com/jspit-de/dt ) 的解决方案返回一个以日期为键的数组。提供的值是输入数组中舍入值的数量。即使没有类扩展,也可以使用更多命令来实现该算法。$inputArr = array(&nbsp; "2018-06-27 20:30:20",&nbsp; "2018-06-27 20:31:20",&nbsp;&nbsp; "2018-06-27 20:37:20",&nbsp; "2018-06-27 20:45:20",&nbsp; "2018-06-27 20:48:20");$interval = "5 Minutes";//create basis$resArr = [];$dt = dt::create(min($inputArr))->round($interval);&nbsp; //start$endDate = dt::create(max($inputArr))->round($interval);for(;$dt <= $endDate; $dt->modify($interval)){&nbsp; $key = $dt->format("Y-m-d H:i:s");&nbsp; $resArr[$key] = 0;}foreach($inputArr as $strDate){&nbsp; $key = $dt::create($strDate)&nbsp; &nbsp; ->round($interval)&nbsp; &nbsp; ->format("Y-m-d H:i:s");&nbsp; $resArr[$key]++;}&nbsp;结果 $resArrarray (&nbsp; '2018-06-27 20:30:00' => 2,&nbsp; '2018-06-27 20:35:00' => 1,&nbsp; '2018-06-27 20:40:00' => 0,&nbsp; '2018-06-27 20:45:00' => 1,&nbsp; '2018-06-27 20:50:00' => 1,)
打开App,查看更多内容
随时随地看视频慕课网APP