php 检查时间是否在范围之间

问题描述

我正在寻找一种方法来检查时间是否在特定时间范围内。

示例: 时间跨度:22:30 至 04:20

如果例如 13:23 介于两者之间,我如何轻松地使用 PHP 进行检查?

这只是时间问题,当前日期不应该起作用。

解决方法

首先定义两种情况:

  • 同一天。如果 T1

  • 不同的日子。如果 T1 或 Tx

如何区分两种情况:如果 T1

极端情况:是 第二天 20:30 和 20:31 之间的 21:30 ?当然是的。但是“一天20:30到当天20:31”和“一天20:30到次日20:31”两种情况无法区分,所以有是否有可能 - 取决于您的时间来源 - 无论您设计什么测试,它都会失败

当然,如果您总是处于“同一天”场景,则永远不会发生此错误 - 但您将无法接受问题中的“22:30 至 04:20”示例。

function between($time,$time1,$time2) {
    if ($time1 < $time2) {
        // same day
        // 09:30 <= 10:27 <= 12:15  : $time is between
        return ($time1 <= $time) && ($time <= $time2);
    }
    // time1 is day1,time2 is next day
    // 22:30 <= 23:30 or 02:15 <= 04:30: both 22:30 and 02:15
    // are in the [ 22:30...04:30 ] range
    // 06:27 is neither >= 23:30 nor <= 02:15,so is out of range
    return ($time1 <= $time) || ($time <= $time2);
}