如果当前时间在其他两个时间之间,我需要计算。例如,要检查时间是否在07:00和10:00之间,我可以使用:
$currentTime = new DateTime('09:00');
$startTime = new DateTime('07:00');
$endTime = new DateTime('10:00');
if ($currentTime->format('H:i') >= $startTime->format('H:i') && $currentTime->format('H:i') <= $endTime->format('H:i')) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果时间是01:00,我想检查一下时间是否在22:00和07:00之间。我不介意这是另一天,即使它介于24小时制的那两个小时之间。示例01:00在22:00至07:00之间
22:00、23:00、00:00、01:00、02:00 ... 07:00
我最终想要实现的是,可以为不同时间之间的服务设置不同的价格。因此,我目前遍历每个小时,计算出该小时的价格范围,并相应地更改价格。如果有人对这个问题有更优雅的解决方案,我将不胜感激。
更新:
假设我有一条规则,说晚上10点至早上7点之间,我要加倍收费。我从开始时间到结束时间循环浏览每个小时,并检查每个小时是否介于22:00(10pm)和07:00(7am)之间,如果是,则应加倍收费。我想避免不得不考虑日期。
无需DateTime::format()用于您的比较。DateTime对象已经具有可比性。
要处理跨越午夜的时间段,您需要更改日期,以便准确反映实际日期。
$currentTime = (new DateTime('01:00'))->modify('+1 day');
$startTime = new DateTime('22:00');
$endTime = (new DateTime('07:00'))->modify('+1 day');
if ($currentTime >= $startTime && $currentTime <= $endTime) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
小智 5
<?php
$currentTime = strtotime('1:00');
$startTime = strtotime('22:00');
$endTime = strtotime('7:00');
if (
(
$startTime < $endTime &&
$currentTime >= $startTime &&
$currentTime <= $endTime
) ||
(
$startTime > $endTime && (
$currentTime >= $startTime ||
$currentTime <= $endTime
)
)
) {
echo 'open';
} else {
echo 'clse';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9974 次 |
| 最近记录: |