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

所有用户都可以去薅羊毛,192元充值200元话费!先到先得!导航栏话费充值,正规可靠,快充慢充自由选择。
欧阳逸资源站 » php生成指定时间间隔的初始化数组

发表评论