PHP碳检查现在是否在两个时间之间(晚上10点至上午8点)


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

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

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

$now = Carbon::now();
$start = Carbon::createFromTimeString('22:00');
$end = Carbon::createFromTimeString('08:00')->addDay();
if ($now->between($start, $end)) {
// ¯_(ツ)_/¯
}

试试这个:

$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,它只检查它是否在两个时间之间,但不包括。

实际上,您可以将true保留,因为它是默认设置的,不需要。

查看此处以获取有关如何将日期和时间与Carbon进行比较的更多信息。

$start = '22:00:00';
$end   = '08:00:00';
$now   = Carbon::now('UTC');
$time  = $now->format('H:i:s');
if ($time >= $start && $time <= $end) {
...
}

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

您可以反向检查算法。

<?php
$pushChannel = "general";
$now = Carbon::now();
$start = Carbon::createFromTime(8, 0);
$end = Carbon::createFromTime(22, 0);
if (!$now->between($start, $end)) {
$pushChannel = "silent";
$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)) {
.....
}

请尝试以下代码,

$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';
}

克里斯想指出的是,如果末日越过午夜,那么你必须考虑到这一点。

这不是最干净的方法,但这里有一种方法似乎有效。

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));
}

此示例只关心小时和分钟,而不关心秒,但您也可以轻松复制它。这样做的关键是在将它们与当前时间进行比较之前比较开始时间和结束时间,如果结束时间小于开始时间,则添加一天结束时间。

对于支持所有开始和结束时间范围的完整解决方案,您可以使用按位XOR。

/*
* must using hours in 24 hours format e.g. set 0 for 12 pm, 6 for 6 am and 13 for 1 pm
*/
private $startTime = '0';
private $endTime = '6';

$currentHour = CarbonCarbon::now()->hour;
$start = $this->startTime > $this->endTime ? !($this->startTime <= $currentHour) : $this->startTime <= $currentHour;
$end = $currentHour < $this->endTime;

if (!($start ^ $end)) {
//Do stuff here if you want exactly between start and end time
}

是的,午夜在持续时间中起着至关重要的作用。我们可以发现now()给定的时间范围如下:

$now = Carbon::now();
$start = Carbon::createFromTime('22', '00');
$end = Carbon::createFromTime('08', '00');
if ($start->gt($end)) {
if ($now->gte($start)) {
$end->addDay();
} elseif ($now->lte($end)) {
$start->subDay();
} else {
return false;
}
}
return $now->between($start, $end);

@AliN11答案的更新版本,考虑了两天或同一天的范围

$now = now();
$start = Carbon::createFromTimeString('22:00');
$end = Carbon::createFromTimeString('08:00');
if ($start > $end) {
$end = $end->addDay();
}
if ($now->between($start, $end)||$now->addDay()->between($start, $end)) {
//add statements
}
<?php
$now = date("H");
if ($now < "20") {
echo "Have a good day!";
}

试试这个:

$start = 22; //Eg. start hour
$end = 08;  //Eg. end hour
$now = Carbon::now('UTC');
if( $start < $now->hour && $now->hour < $end){
// Do something
}

@AliN11(目前排名靠前(的答案很好,但并不像人们立即预期的那样工作,午夜后它只是中断,正如 @Sasha 的评论中提出的那样

解决方案是反转逻辑,并检查时间是否不在反向小时之间。

这是一个符合预期工作的替代方案:

$now = Carbon::now();
$start = Carbon::createFromTimeString('08:00');
$end = Carbon::createFromTimeString('22:00');
if (! $now->between($start, $end)) {
// We're all good
}

如果你有一个初始值来检查时间间隔,你可以用Carbon的copy((方法启动它,并使用setHours((setMinutes((设置小时和分钟。之后,只需使用常规的between((。

例如,检查"2022-01-28 19:00"是否为>= 07:00 <19:00。

$fromRequest = "2022-01-28 19:00";
$from = Carbon::parse($fromRequest);
$start = $from->copy()->setHours(7)->setMinutes(0);
$end = $from->copy()->setHours(18)->setMinutes(59);
$this->isDaytime = $from->between($start, $end); // false

> Laravel和PHP使用碳之间的时间是这样的

$startDate = Carbon::createFromFormat('H:i a', '08:00 AM');
$endDate = Carbon::createFromFormat('H:i a', '07:00 PM');
$check = Carbon::now()->between($startDate, $endDate, true);
if($check){
dd('In Between');
}else{
dd('In Not Between');
}

相关内容

最新更新