Php 在精确的时间内反向循环
我有一个cron脚本,每30分钟检查一次另一个应用程序的状态(同步到:正好在一小时半)。如果状态发生变化(1或0),它会将新状态、日期和时间记录在数据库中。 我现在正试图显示“过去48小时内的状态”条形图 由于数据库只记录状态的变化,我不能简单地将这些数据直接与图表一起使用,因为这不会给出过去48小时内每半小时的状态。相反,我决定将每个数据库结果放入一个关联数组('12/11/15-13:00'=>'1','12/12/15-22:30'=>'0'),然后使用一个循环,该循环向后循环30分钟,持续48小时(96次),并检查数组中是否存在该时间段的值;如果是,则回显该值,否则回显上一个值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分钟,持
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
您可以创建$startDateTime
和$endDateTime
。对于$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...