根据时间间隔来计算当前时间为设定的时间间隔的第几次,并返回当前间隔的开始时间

admin 2024-11-03 02:25:51 203

<?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(),
        ];
    }
最后于 14天前 被admin编辑 ,原因:
可爱猫?Telegram电报群 https://t.me/ikeaimao

社区声明 1、本站提供的一切软件、教程和内容信息仅限用于学习和研究目的
2、本站资源为用户分享,如有侵权请邮件与我们联系处理敬请谅解!
3、本站信息来自网络,版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑或手机中彻底删除上述内容
最新回复 (0)

您可以在 登录 or 注册 后,对此帖发表评论!

返回