为了账号安全,请及时绑定邮箱和手机立即绑定

间隔5分钟

间隔5分钟

PHP
三国纷争 2022-01-24 12:59:34
我正在尝试分隔日期,例如:$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/>";}
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

如果您想要一个输出数组,其中包含输入数组中最早和最晚时间之间的所有 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) {

    $timestamp = strtotime($time);

    $rounded = round($timestamp / ($interval * 60), 0) * $interval * 60;

    return $rounded;

}


$interval = 5; // minutes

$start = roundToNearestMinuteInterval(min($arr), $interval);

$end = roundToNearestMinuteInterval(max($arr), $interval);

for (; $start <= $end; $start += $interval * 60) {

    $results[] = date('Y-m-d H:i:s', $start);

}

print_r($results);

输出:


Array

(

    [0] => 2018-06-27 20:30:00

    [1] => 2018-06-27 20:35:00

    [2] => 2018-06-27 20:40:00

    [3] => 2018-06-27 20:45:00

    [4] => 2018-06-27 20:50:00

)


查看完整回答
反对 回复 2022-01-24
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

具有 DateTime 扩展名 dt ( https://github.com/jspit-de/dt ) 的解决方案返回一个以日期为键的数组。提供的值是输入数组中舍入值的数量。即使没有类扩展,也可以使用更多命令来实现该算法。


$inputArr = 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"

);


$interval = "5 Minutes";


//create basis

$resArr = [];

$dt = dt::create(min($inputArr))->round($interval);  //start

$endDate = dt::create(max($inputArr))->round($interval);

for(;$dt <= $endDate; $dt->modify($interval)){

  $key = $dt->format("Y-m-d H:i:s");

  $resArr[$key] = 0;

}


foreach($inputArr as $strDate){

  $key = $dt::create($strDate)

    ->round($interval)

    ->format("Y-m-d H:i:s");

  $resArr[$key]++;

结果 $resArr


array (

  '2018-06-27 20:30:00' => 2,

  '2018-06-27 20:35:00' => 1,

  '2018-06-27 20:40:00' => 0,

  '2018-06-27 20:45:00' => 1,

  '2018-06-27 20:50:00' => 1,

)


查看完整回答
反对 回复 2022-01-24
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信