在php中指定的时间段内运行代码

lvmkulzt  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(139)

例如,我想从21:0008:00运行代码。但代码无法正常工作,因为时钟到达24:00(00:00)时,代码会发生混乱,无法设置01:00。请检查00:00,因为时钟是24小时制。
我需要这个代码的黑暗模式的网站,这样我的网站将在黑暗模式之间的一个理想的小时,例如,从晚上10点到早上6点。

注意:我可以为此任务指定任何时间,而不是只选择一个时间。例如,我可以选择21:00到3:00 am。这是随机的,因为时间是由我的客户选择的,我不知道他们选择了什么时间。!!!

如果我指定任何一个小时,你能指导我让我的代码在24小时内正确工作吗?

$hour = date('H');
    //$hour = 23;

    if( $hour > 22 && $hour < 8) {

      echo "Good night";

    }else{
      echo "Good Morning";
    }
yc0p9oo0

yc0p9oo01#

您可以使用模运算符来处理24小时制。

$start_hour = 21;
$end_hour = 8;
$current_hour = date('H');

// handle the 24-hour cycle
$current_hour = $current_hour % 24;

if($current_hour >= $start_hour || $current_hour < $end_hour) {
    echo "Good night";
} else {
    echo "Good morning";
}

这样,只要开始时间大于或等于结束时间,它就适用于您选择的任何时间范围。
时:分:

$start_time = "21:00";
$end_time = "08:00";
$current_time = date('H:i');

$start_hour = (int)substr($start_time, 0, 2);
$start_minute = (int)substr($start_time, 3, 2);

$end_hour = (int)substr($end_time, 0, 2);
$end_minute = (int)substr($end_time, 3, 2);

$current_hour = (int)substr($current_time, 0, 2);
$current_minute = (int)substr($current_time, 3, 2);

// handle the 24-hour cycle
$current_hour = $current_hour % 24;

if(($current_hour > $start_hour || ($current_hour == $start_hour && $current_minute >= $start_minute)) || ($current_hour < $end_hour || ($current_hour == $end_hour && $current_minute < $end_minute))) {
    echo "Good night";
} else {
    echo "Good morning";
}
xcitsw88

xcitsw882#

反转间隔(21:00到08:0008:00到21:00)时,还需要反转逻辑:

  • 如果$start$end,则需要检查$current >= $start && $current <= $end
  • 否则,$current >= $start || $current <= $end

你还需要考虑分钟和秒。为此,你可以传递一个完整的格式正确的H:M:S字符串,并将所有内容转换为相同的单位,这样比较就有意义了。如果你创建一个只做一件事的专用函数,你会更容易看到:

// Error checking omitted for brevity
function hmsToSeconds(string $hms): int
{
    [$h, $m, $s] = array_pad(preg_split('/[^\d]+/', $hms), 3, 0);
    return 3600 * $h + 60 * $m + $s;
}

function inRange(string $start, string $end, string $current = null): bool
{
    if ($current === null) {
        $current = date('H:i:s');
    }

    $start = hmsToSeconds($start);
    $end = hmsToSeconds($end);
    $current = hmsToSeconds($current);

    if ($start < $end) {
        return $current >= $start && $current <= $end;
    }
    return $current >= $start || $current <= $end;
}

if (inRange('21:00:00', '8:00:00')) {
    echo 'Good night';
} else {
    echo 'Good morning';
}

Demo
不用说,因为我们是在服务器上使用服务器时钟,所以这对用户来说可能没有意义,如果你知道用户的时区,计算当前时间时使用you can take it into account

相关问题