web-dev-qa-db-ja.com

phpカーボンチェックが2回の間にあるかどうか(午後10時から午前8時)

$start = '22:00:00';
$end = '08:00:00';
$now = Carbon::now('UTC');

$ nowの時刻が時間範囲内にあるかどうかを確認するにはどうすればよいですか?

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

if ($time >= $start && $time <= $end) {
    ...
}

それを行う必要がありますが、日付は考慮されていません

4
Ben Guest

これを試して:

_  $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
  }
_

$time->between($morning, $evening, true)trueは、_$time_が_$morning_と_$evening_の間にあるかどうかをチェックします。代わりにfalseと書くと、2回の間にあるかどうかだけがチェックされますが、含まれていません。

実際には、trueはデフォルトで設定されており、不要であるため、そのままにしておくことができます。

日付と時刻をCarbonと比較する方法の詳細については、 ここ を確認してください。

3
Julian Gorfer
$restrictStartTime = Carbon::createFromTime(22, 0, 0);  //carbon inbuild function which will create todays date with the given time
$restrictEndTime = Carbon::createFromTime(8, 0, 0)->addDays(1); //this will create tomorrows date with the given time
$now = Carbon::now();

if($now->gt($restrictStartTime) && $now->lt($restrictEndTime)) {
 .....
 }
1
Arun Gangula

Carbonを使用してこれを実現する方法はいくつかあります。最も簡単な方法の1つは、createFromTimeStringおよびbetweenメソッドを使用することです。

$now = Carbon::now();

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

if ($now->between($start, $end)) {
    // ¯\_(ツ)_/¯
}
1
AliN11

これを試して :

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

if( $start < $now->hour && $now->hour < $end){
    // Do something
}
0
Yann Mantelli

クリスが指摘しようとしているのは、終わりの時が真夜中を超える場合、あなたはそれを説明しなければならないということです。

これはそれを行うための最もクリーンな方法ではありませんが、これはうまくいくように見える方法です。

private function isNowBetweenTimes($timezone, $startDateTime, $endDateTime) {
    $curTimeLocal = Carbon::now($timezone);
    $startTime = $curTimeLocal->copy();
    $startTime->hour = $startDateTime->hour;
    $startTime->minute = $startDateTime->minute;
    $endTime = $curTimeLocal->copy();
    $endTime->hour = $endDateTime->hour;
    $endTime->minute = $endDateTime->minute;
    if ($endTime->lessThan($startTime))
        $endTime->addDay();

    return ($curTimeLocal->isBetween($startTime, $endTime));
}

この例では、秒ではなく時間と分のみを考慮していますが、それも簡単にコピーできます。これの鍵は、現在の時刻と比較する前に開始時刻と終了時刻を比較し、終了時刻が開始時刻よりも短い場合は終了時刻に1日を追加することです。

0
Wayne Fulcher
<?php
$now = date("H");

if ($now < "20") {
    echo "Have a good day!";
}
0
Jan Agterhuis

以下のコードをお試しください、

$start = '22:00:00';
$end = '08:00:00';
$now = Carbon::now('UTC');

$nowTime = $now->hour.':'.$now->minute.':'.$now->second;

if(strtotime($nowTime) > strtotime($start) && strtotime($nowTime) < strtotime($end) ) {
    echo 'YES';
} else {
    echo 'NO';
}
0
MD. ABDUL Halim