php生成指定时间间隔的初始化数组
前端描绘折线图,我必须每个时间点都返回给前端吗?有的时间点没数据,我还得拼接0返回给前端,有没有更好的办法?
因此我写了一个php方法,功能是创建一个包含所有时间点的时间序列(例如,按每分钟或每小时生成一个时间点),并初始化对应的数据值为0。
function generateTimeSeriesWithInterval($startDateTime, $endDateTime, $intervalMinutes) {
// 将起始时间调整为比起始时间小的5分钟的倍数,并将秒数设置为0
$startDateTime->modify('-' . ($startDateTime->format('i') % $intervalMinutes) . ' minutes');
$startDateTime->setTime($startDateTime->format('H'), $startDateTime->format('i'), 0);
$interval = new DateInterval("PT{$intervalMinutes}M");
$timeSeries = array();
$currentDateTime = clone $startDateTime;
while ($currentDateTime <= $endDateTime) {
$formattedDateTime = $currentDateTime->format('Y-m-d H:i:s');
$timeSeries[$formattedDateTime] = 0;
$currentDateTime->add($interval);
}
return $timeSeries;
}
$startDateTime = new DateTime('2024-02-28 18:12:00');
$endDateTime = new DateTime('2024-02-28 19:59:59');
$intervalMinutes = 20;
$timeSeries = generateTimeSeriesWithInterval($startDateTime, $endDateTime, $intervalMinutes);
foreach ($timeSeries as $dateTime => $value) {
echo $dateTime . ' => ' . $value . "\n";
}
结果如下:
2024-02-28 18:10:00 => 0 2024-02-28 18:15:00 => 0 2024-02-28 18:20:00 => 0 2024-02-28 18:25:00 => 0 2024-02-28 18:30:00 => 0 2024-02-28 18:35:00 => 0 2024-02-28 18:40:00 => 0 2024-02-28 18:45:00 => 0 2024-02-28 18:50:00 => 0 2024-02-28 18:55:00 => 0 2024-02-28 19:00:00 => 0 2024-02-28 19:05:00 => 0 2024-02-28 19:10:00 => 0 2024-02-28 19:15:00 => 0 2024-02-28 19:20:00 => 0 2024-02-28 19:25:00 => 0 2024-02-28 19:30:00 => 0 2024-02-28 19:35:00 => 0 2024-02-28 19:40:00 => 0 2024-02-28 19:45:00 => 0 2024-02-28 19:50:00 => 0 2024-02-28 19:55:00 => 0