基于星期几和时间范围的条件
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 } ?>
我不确定这对时间框架是否有帮助?
您可以使用不同的 date/time 组件来简化代码:
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;
//....
}
基本上是这样的:
<?php
if (date('l') === 'Monday' && date('G') >= 2 && date('G') < 4) {
// do something
}
您在日期名称周围遗漏了引号。
我写的条件将在周一下午 2 点到 4 点之间评估为真(而下午 4 点本身不会,例如,最后允许的值为 3:59 下午)。
您最好使用 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));
此处的代码检查日期时间是否介于开始时间和结束时间之间。
<?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');
将 return 星期一或任何一天。
$date->format('H:i');
将 return 13:15 或任何时间。
所有的条件都打包成一个数组,方便维护
一个简化的例子:
$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]();
}
}
周二输出 13:25:
do something on Tue
我正在尝试根据星期几和当天的时间范围找到条件的解决方案。我设法找到了星期几的代码,但我找不到如何在一天中加入时间范围?
例如:
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 } ?>
我不确定这对时间框架是否有帮助?
您可以使用不同的 date/time 组件来简化代码:
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;
//....
}
基本上是这样的:
<?php
if (date('l') === 'Monday' && date('G') >= 2 && date('G') < 4) {
// do something
}
您在日期名称周围遗漏了引号。
我写的条件将在周一下午 2 点到 4 点之间评估为真(而下午 4 点本身不会,例如,最后允许的值为 3:59 下午)。
您最好使用 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));
此处的代码检查日期时间是否介于开始时间和结束时间之间。
<?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');
将 return 星期一或任何一天。
$date->format('H:i');
将 return 13:15 或任何时间。
所有的条件都打包成一个数组,方便维护
一个简化的例子:
$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]();
}
}
周二输出 13:25:
do something on Tue