在PHP中检查时间范围是否包含其他时间范围

vxf3dgd4  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(160)

你好你能帮我解决我的问题吗?
检查时间范围是否包含另一个时间范围,例如我有2个时间范围:

$nightShiftStart = strtotime("22:00:00 today");
$nightShiftEnd = strtotime("06:00:00 tomorrow");
$overTimeStart = strtotime("21:00:00 today");
$overTimeEnd = strtotime("07:00:00 tomorrow");

如果我检查加班开始和结束是否包含夜班计划,它应该返回true。2我有一个代码。

if ($overTimeStart >= $nightShiftStart && $overTimeEnd <= $nightShiftEnd ) {
    return true;
} else {
    return false;
}

上面的代码将返回true。但是如果我将加班范围更改为:

$nightShiftStart = strtotime("22:00:00 today");
$nightShiftEnd = strtotime("06:00:00 tomorrow");
$overTimeStart = strtotime("17:00:00 today");
$overTimeEnd = strtotime("20:00:00 today");

它也返回真,它应该返回假,因为加班时间只有下午5点到8点,时间不符合夜班。你能帮我这个忙吗?我已经被困了20天了。

xtupzzrd

xtupzzrd1#

看看这份文件:https://www.php.net/manual/en/datetime.formats.relative.php
此规则的例外情况包括:"昨天"、"午夜"、"今天"、"中午"和"明天"。注意,"明天11:00"和"明天11:00"是不同的。考虑到今天的日期"2008年7月23日",第一个产生"2008 - 07 - 2411:00",而第二个产生"2008 - 07 - 2400:00"。其原因是这五个语句直接影响当前时间。
所以正确的字符串应该是:

$nightShiftStart = strtotime("today 22:00:00");
$nightShiftEnd = strtotime("tomorrow 06:00:00");
$overTimeStart = strtotime("today 17:00:00");
$overTimeEnd = strtotime("today 20:00:00");

相关问题