php carbon 检查现在是否在两次之间(晚上 10 点到早上 8 点)

Chr*_*ris 16 php php-carbon

$start = '22:00:00';
$end = '08:00:00';
$now = Carbon::now('UTC');
Run Code Online (Sandbox Code Playgroud)

如何检查 $now 的时间是否在时间范围内?

Ali*_*N11 25

有几种方法可以通过使用 Carbon 来实现。最简单的方法之一是使用createFromTimeStringbetween方法:

$now = Carbon::now();

$start = Carbon::createFromTimeString('22:00');
$end = Carbon::createFromTimeString('08:00')->addDay();

if ($now->between($start, $end)) {
    // ¯\_(?)_/¯
}
Run Code Online (Sandbox Code Playgroud)

  • 对于每个看起来这个的人。请记住,“createFromTimeString”方法将始终从时钟(如时间输入)返回当前日期。当你经过午夜时,这确实会成为一个问题。然后在这个例子中,突然第二天和后天将成为目标日期和时间。因此,您必须将日期字符串放入方法参数中,并通过数据库或文件更新/存储它。 (3认同)

Ben*_*est 7

$start = '22:00:00';
$end   = '08:00:00';
$now   = Carbon::now('UTC');
$time  = $now->format('H:i:s');

if ($time >= $start && $time <= $end) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

应该这样做,但不考虑日期

  • 你的 OR 逻辑是错误的。它应该是 AND。如果现在是 13:00:00,范围是 12:00:00 到 12:45:00,那么您的解决方案会回答是,因为 $time 实际上是 &gt;= $start。 (2认同)

Jul*_*fer 6

尝试这个:

  $time = Carbon::now();
  $morning = Carbon::create($time->year, $time->month, $time->day, 8, 0, 0); //set time to 08:00
  $evening = Carbon::create($time->year, $time->month, $time->day, 18, 0, 0); //set time to 18:00
  if($time->between($morning, $evening, true)) {
    //current time is between morning and evening
  } else {
    //current time is earlier than morning or later than evening
  }
Run Code Online (Sandbox Code Playgroud)

true$time->between($morning, $evening, true)检查是否$time是与包括间$morning$evening。如果您false改为写入,它只会检查它是否在两次之间但不包括在内。

实际上,您可以离开true,因为它是默认设置的并且不需要。

点击这里获取有关如何日期和时间与碳比的更多信息。


小智 0

尝试这个 :

$start = 22; //Eg. start hour
$end = 08;  //Eg. end hour
$now = Carbon::now('UTC');

if( $start < $now->hour && $now->hour < $end){
    // Do something
}
Run Code Online (Sandbox Code Playgroud)