检查两个时间之间的时间差。

4

我想要检查当前时间是否在两个时间之间。

我浏览了多个脚本,但所有的脚本都包括日期或太过复杂,或者只计算整点时间,例如6点或7点,而我需要检查小时和分钟。

我希望能得到帮助,我需要的脚本设置是:

$begintime = 8:30;
$endtime = 17:00;

if(currenttime is between $begintime and $endtime) {
    // do something
} else {
    // do something else
}

私有函数 is_between_times($from, $to) { $Carbon = new Carbon(); $from = $Carbon->createFromFormat('H:i:s', $from); $to = $Carbon->createFromFormat('H:i:s', $to); return $Carbon->now()->between($from, $to); } - Marlon Bernal
3个回答

12

使用 DateTime 对象进行定义。它将内部使用当前日期,这样就可以在比较时忽略它。

$now = new DateTime();
$begin = new DateTime('8:00');
$end = new DateTime('17:00');

if ($now >= $begin && $now <= $end)
高级: 为了在执行期间即使日期更改(DateTime对象可能存在1天偏移日期),也要使其无懈可击,重置$now$start$end DateTime 对象的日期为:
$y = (int) $now->format('Y');
$m = (int) $now->format('n'); // n is the month without leading zeros
$d = (int) $now->format('d');

$begin->setDate($y, $m, $d);
$end->setDate($y, $m, $d);

你也可以查看Brick\DateTime扩展,其中包含LocalTime类,它会忽略日期。


1
@user2461508 你能把答案标记为已接受吗? - Finwe

4

看看PHP的DateTime函数。

$now = new Datetime("now");
$begintime = new DateTime('08:30');
$endtime = new DateTime('17:00');

if($now >= $begintime && $now <= $endtime){
    // between times
    echo "yay";
} else {
    // not between times
    echo "nay";
}

此外,确保您的php.ini中正确设置了时区。或者您可以使用date_default_timezone_set()在运行时进行设置。

谢谢,这帮了很大的忙@sam - user2461508

0

检查一下。我测试了这段代码,它运行良好。

date_default_timezone_set("Asia/Kolkata");
$current_time = date("h:i a");
$begin = "9:00 am";
$end   = "5:00 pm";

$date1 = DateTime::createFromFormat('H:i a', $current_time);
$date2 = DateTime::createFromFormat('H:i a', $begin);
$date3 = DateTime::createFromFormat('H:i a', $end);

if ($date1 > $date2 && $date1 < $date3) {
   echo 'Here';
} else {
   echo 'Not';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接