用 strtotime() 将时间转为时间戳再比较最稳妥;需统一设时区,避免字符串比较、时区及跨天问题。

直接用 strtotime() 转成时间戳比大小,最稳;别用字符串直接比较,会出错。
怎么判断当前时间是否在某个时间段内
核心是统一转成时间戳再比较,避免时区、格式、24小时制等干扰。比如判断现在是不是在「09:00–17:30」之间:
-
strtotime('09:00')和strtotime('17:30')会按当天日期补全,生成完整时间戳 - 用
time()获取当前时间戳,直接比较:if ($now >= $start && $now - 注意:如果跨天(如「22:00–06:00」),
strtotime('06:00')会落在当天,得手动加 24 小时:$end = strtotime('06:00') + 86400
怎么判断两个时间段是否有交集
常见于排班、预约冲突检测。给定两段区间 [$a_start, $a_end] 和 [$b_start, $b_end],有交集的充要条件是:
$a_start (注意用 <code>,不是 <code>,端点重合是否算交集需按业务定)- 所有时间都必须先用
strtotime()转成整数,否则字符串比较会出问题(例如'10:00' > '9:30'是 false) - 如果原始数据含日期(如
'2024-05-20 14:00'),strtotime()照样能解析,无需额外处理
为什么不能直接用 date('H:i') 字符串比较
因为字符串比较是字典序,'9:30' > '10:00' 返回 true('9' > '1'),结果完全错误。
- 哪怕补零写成
'09:30',遇到时区切换或夏令时,date()输出可能不一致 -
DateTime类虽更严谨,但小场景下过度设计;strtotime()足够快且兼容 PHP 5.2+ - 唯一要注意的是:
strtotime()受date_default_timezone_set()影响,务必在脚本开头设好时区,否则本地测试和服务器行为可能不一致
真正容易被忽略的不是逻辑,而是时区和跨天边界——特别是做定时任务或跨国服务时,strtotime('00:00') 在不同时区可能指向不同物理时刻,别只靠本地测试就上线。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











