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