<?php
/**
* 根据时间间隔和时间(例如2024-11-07 22:55:23)计算出当前时间(或指定时间)基于间隔 $frequency 为当天的第几次。
*
* @param int $frequency 几分钟一个时间段 单位分,例如 5
* @param string|null $date_time 例如 2024-11-07 22:55:23
* @return array|bool
*/
public function calculateIndex(int $frequency, string|null $date_time = null): array|bool
{
if ($frequency <= 0) return false;
try {
$dateTime = ($date_time === null ? new \DateTime() : new \DateTime($date_time));
} catch (Exception $e) {
return false;
}
// 计算从00:00:00开始的总分钟数
$minutes = (int)$dateTime->format('i') + (int)$dateTime->format('H') * 60;
// 计算当前时间是第几次间隔,假设间隔为5,那么00:05:00是算做第2次,那么采用舍去法取整后再+1就是我们要的结果
$index = (int)floor($minutes / $frequency) + 1;
// 计算当前次数的开始分钟数
$startMinutes = ($index - 1) * $frequency;
// 创建一个新的DateTime对象,表示当前次数的开始时间
$startDateTime = (clone $dateTime)->setTime(0, 0)->add(new \DateInterval("PT{$startMinutes}M"));
return [
'time_at' => $dateTime->format('Y-m-d H:i:s'),
'time' => $dateTime->getTimestamp(),
'index' => $index,
'start_at' => $startDateTime->format('Y-m-d H:i:s'),
'start_time' => $startDateTime->getTimestamp(),
];
}
最后于 5月前
被admin编辑
,原因: