PHP中如何将计算出的早于09:00的配送时间小时设为09:00
嘿,这个需求我之前做项目的时候刚好碰到过,用PHP的DateTime类来处理最稳妥,给你整理了一个清晰的实现方案👇
实现方案
核心思路
- 先基于起始时间(当前时间或下单时间)加上配送分钟数,得到初始配送时间
- 检查初始时间是否落在00:01-08:59区间内
- 如果符合区间,将时间调整为当天的09:00;其余情况保持原时间不变
完整代码示例
<?php // 示例配送分钟数,实际可从业务逻辑中获取 $minutes = 150; // 起始时间:可以是当前时间,也可以是指定的下单时间 // 比如指定下单时间:new DateTime('2024-05-20 22:45:00') $startTime = new DateTime(); // 计算初始配送时间 $deliveryTime = clone $startTime; $deliveryTime->add(new DateInterval("PT{$minutes}M")); // 提取小时和分钟用于判断 $hour = (int)$deliveryTime->format('H'); $minute = (int)$deliveryTime->format('i'); // 判断是否需要调整时间:00:01到08:59之间 if ($hour < 9 && !($hour === 0 && $minute === 0)) { // 调整为当天09:00 $deliveryTime->setTime(9, 0); } // 输出格式化后的配送时间 echo "预计配送时间:" . $deliveryTime->format('Y-m-d H:i:s'); ?>
关键细节说明
- 使用
DateTime和DateInterval处理时间加减,避免手动计算时间戳带来的跨天、跨月错误,比如配送时间跨到第二天凌晨的情况也能正确处理 - 判断条件
$hour < 9 && !($hour === 0 && $minute === 0)精准匹配需求:排除了00:00整的情况,只处理00:01到08:59的时间段 - 如果需要基于固定的起始时间(比如用户下单的具体时间),只需要把
new DateTime()替换成指定的时间字符串即可,比如new DateTime('2024-05-20 19:30:00')
内容的提问来源于stack exchange,提问作者Gurkan
相关产品推荐
相关产品推荐

