Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在精确的时间内反向循环_Php_Loops_Time_Cron - Fatal编程技术网

Php 在精确的时间内反向循环

Php 在精确的时间内反向循环,php,loops,time,cron,Php,Loops,Time,Cron,我有一个cron脚本,每30分钟检查一次另一个应用程序的状态(同步到:正好在一小时半)。如果状态发生变化(1或0),它会将新状态、日期和时间记录在数据库中。 我现在正试图显示“过去48小时内的状态”条形图 由于数据库只记录状态的变化,我不能简单地将这些数据直接与图表一起使用,因为这不会给出过去48小时内每半小时的状态。相反,我决定将每个数据库结果放入一个关联数组('12/11/15-13:00'=>'1','12/12/15-22:30'=>'0'),然后使用一个循环,该循环向后循环30分钟,持

我有一个cron脚本,每30分钟检查一次另一个应用程序的状态(同步到:正好在一小时半)。如果状态发生变化(1或0),它会将新状态、日期和时间记录在数据库中。 我现在正试图显示“过去48小时内的状态”条形图

由于数据库只记录状态的变化,我不能简单地将这些数据直接与图表一起使用,因为这不会给出过去48小时内每半小时的状态。相反,我决定将每个数据库结果放入一个关联数组('12/11/15-13:00'=>'1','12/12/15-22:30'=>'0'),然后使用一个循环,该循环向后循环30分钟,持续48小时(96次),并检查数组中是否存在该时间段的值;如果是,则回显该值,否则回显上一个值

for ($i=-96; $i <= 0; $i++) {
    $n = $i * 30;
    $d_amount = $n." mins, - 1 month";
    $d_minus = strtotime($d_amount);
    $d1 = date('j/n - h', $d_minus)."h : ".date('i', $d_minus)."m";
    if (isset($chart_availabilityA[$d1])) {
        echo "['".$d1."', ".$chart_availabilityA[$d1]."],";
        $prev_value = $chart_availabilityA[$d1];
    } else {
        echo "['".$d1."', ".$prev_value."],";
    }
 }
for($i=-96;$i'1','12/11/15-13:37'=>0',因此它不会从数组中提取值

我如何制作每小时循环一次和每半小时循环一次的代码? 还是有更好的方法来满足我的需求?

也许你可以使用a、a和a

您可以创建$start
DateTime
和$end
DateTime
。对于$start,您可以使用
setTime
方法设置所需的时间。 在本例中,您可以将时间设置为30分钟或0分钟,以符合您的条件(每一小时和半小时)。 从那一刻起,返回48小时。然后创建一个30分钟的$dateInterval。然后创建一个$datePeriod,您可以使用
foreach
循环,在本例中,循环97次(包括开始日期)

如果要省略开始日期,可以使用:

$datePeriod = new DatePeriod($start, $dateInterval, $end, DatePeriod::EXCLUDE_START_DATE);
例如,使用您的日期“12/11/15-13:07”作为开始日期:

$start = DateTime::createFromFormat('m/d/y - H:i', '12/11/15 - 13:07');
$start
    ->setTime(
        $start->format('H'),
        $start->format('i') > 30 ? 30 : 0
    )
    ->modify('-48 hours');

$end = DateTime::createFromFormat('m/d/y - H:i', '12/11/15 - 13:07');
$dates = array();
$dateInterval = new DateInterval('PT30M');
$datePeriod = new DatePeriod($start, $dateInterval, $end);

foreach($datePeriod as $date) {
    $d1 = $date->format('m/d/y - H:i');
    array_unshift($dates, $d1);
}

var_dump($dates);
将导致:

array(97) {
  [0]=>
  string(16) "12/11/15 - 13:00"
  [1]=>
  string(16) "12/11/15 - 12:30"
  [2]=>
  string(16) "12/11/15 - 12:00"
etc...