簡體   English   中英

基於星期幾和時間范圍的條件

[英]Conditional based on day of week and time range

我正在嘗試根據星期幾和當天的時間范圍找到條件的解決方案。 我已經設法找到一周中某一天的代碼,但我找不到如何在一天內合並時間框架?

例如:

IF today is Monday AND between 2pm and 4pm THEN do THIS

這就是我所擁有的...

<?php   
date_default_timezone_set('Australia/Perth'); // PHP supported timezone
$script_tz = date_default_timezone_get();
// get current day:
$currentday = date('l'); ?>
<?php if ($currentday == Monday){ ?>
Monday
<?php } elseif ($currentday == Tuesday){ ?>
Tuesday
<?php } elseif ($currentday == Wednesday){ ?>
Wednesday
<?php } elseif ($currentday == Thursday){ ?>
Thursday
<?php } elseif ($currentday == Friday){ ?>
Friday
<?php } elseif ($currentday == Saturday){ ?>
Saturday
<?php } elseif ($currentday == Sunday){ ?>
Sunday
<?php } else { ?>
<?php } ?>

我不確定這對時間框架是否有幫助? 檢查星期幾和時間

基本上是這樣的:

<?php

if (date('l') === 'Monday' && date('G') >= 2 && date('G') < 4) {
    // do something
}

您在日期名稱周圍缺少引號。

我寫的條件將在星期一下午 2 點到 4 點之間評估為真(而下午 4 點本身不會,例如最后允許的值是下午 3:59)。

您可以使用不同的日期/時間組件來簡化代碼:

function between($value, $start, $end)
{
    return $value > $start && $value <= $end;
}

$hours = date("G");

switch( date("N"))
{
    case 1:  //monday
        if (between($hours,12 + 2,12 + 4 )) //using 24h format to avoid checking am/pm
        {
            // IF today is Monday AND between 2pm and 4pm THEN do THIS
        }
    break;

    case 2: //tuesday
    break;


    //....

}

您最好使用date('N') ,因為它不依賴於語言,並且date('H')可以利用更適合時間比較的 24 小時格式。

function date_in_frame($test_date, $day, $start, $end){
    $d = new Datetime($test_date);
    return $d->format("N") == $day && $d->format("H") >= $start && $d->format("H") < $end;
}
//test if "now" is Monday between 2pm (14:00) and 4pm (15:59)
var_dump(date_in_frame("now", 0, 14, 16));

此處的代碼檢查 DateTime 是否在開始時間和結束時間之間。

<?php

$date = new DateTime('2019-11-18 12:49');

$start = new DateTime('2019-11-18 09:00');
$end = new DateTime('2019-11-18 17:00');

if ($date > $start && $date < $end) {
    echo 'In the zone!';
}

筆記。

$date->format('l'); 將在星期一或任何一天返回。

$date->format('H:i'); 將在 13:15 或任何時間返回。

玩一玩! https://3v4l.org/XK5KR

將所有條件打包成一個數組更易於維護。

一個簡化的例子:

$ranges = [
  ['Monday',12,14, function(){echo "do something";}],
  ['Tuesday',12,14, function(){echo "do something on Tue";}],
  //: more
];

$curWeekDay = date('l');
$hours = date("G");
foreach($ranges as $range){
  if($curWeekDay == $range[0] AND $hours >= $range[1] AND $hours < $range[2]){
    $range[3]();
  }
} 

Output 周二 13:25:

do something on Tue 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM