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