如何在特定持续时间之间在php中显示任何内容?

fla*_*ash 5 php time if-statement date and-operator

我有一个如下所示的php代码,我想在一周的两个日历日之间显示任何内容。

的值来内$data->{"select_start_day"}; $data->{"start_time"}; $data->{"select_end_day"};并且$data->{"end_time"};由用户控制的。

PHP代码:

    if (file_exists('feeds/ptp-ess_landing.json')) {
    $data = json_decode(file_get_contents('feeds/ptp-ess_landing.json'));
    }

    date_default_timezone_set('America/Toronto');
    $arradate = strtolower(date('D'));
    $nowtime = (int)date('His');


    $start_day=$data->{"select_start_day"};
    $start_time=$data->{"start_time"};

    $end_day=$data->{"select_end_day"};
    $end_time=$data->{"end_time"};
Run Code Online (Sandbox Code Playgroud)

例如,让我们假设用户输入$start_day的sun $start_time是143400 $end_day作为wed $end_time作为140000

以上持续时间表示我们处于范围内,并且应该显示我们要显示的任何内容,直到明天下午2点为止。我在美国东部时间。

我正在使用以下代码以获取星期几和时间的当前日期:

date_default_timezone_set('America/Toronto');
$arradate = strtolower(date('D'));
$nowtime = (int)date('His');
Run Code Online (Sandbox Code Playgroud)

问题陈述:

我想知道如果我需要使用逻辑,以便它打印任何内容Sunday 143400和Wednesday 140000。

if()    {
    echo "Its in range";
}
Run Code Online (Sandbox Code Playgroud)

情况:

  1. 如果该替代适用于从上午8点的星期一到下午6 点的星期一,而今天是星期三,则该替代不适用。

  2. 如果它是星期一下午6点和星期五下午6点,那么覆盖将在星期一,星期二全天,星期三全天,星期四全天,星期五至下午6点工作6个小时

  3. 如果周日下午6点和周一下午6点,然后进入倍率为工作在周一6小时和周一18小时。

  4. 如果其星期二下午6点和星期五下午6点,而今天是星期二晚上9点,则优先选择将适用。

  5. 如果周四下午6点和周三下午6点,然后进入倍率工作了周四6小时,上周五24小时,上周六24小时,上周日24小时,周一24小时,周二24小时,周三24小时和18小时在星期四。

Art*_*rth 2

这个问题的困难部分在于处理周末“环绕”的范围,即您的示例案例 5

我建议设置一个涵盖两周的参考天数数组

$days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];
$days = array_merge($days, $days);
Run Code Online (Sandbox Code Playgroud)

对其进行切片,使其从起始点当天开始(将从 0 开始重新索引)

$days = array_slice($days, array_search($startDay, $days));
Run Code Online (Sandbox Code Playgroud)

然后,您可以为现在和终点构建一个参考整数

$nowRef = (int) (array_search($nowDay, $days) . $nowTime);
$endRef = (int) (array_search($endDay, $days) . $endTime);
Run Code Online (Sandbox Code Playgroud)

请注意,您可以对起点执行相同的操作,但由于 days 数组以$startDay(索引 0)开头,这相当于$startTime

你的 if 条件就变成了

if ($nowRef >= $startTime && $nowRef <= $endRef) {
   // IN RANGE
}
Run Code Online (Sandbox Code Playgroud)

注意:这假设您的用户输入已经过验证,并且如果开始日期和结束日期相同,则结束时间大于开始时间


您的命名约定有点不一致,因此我重命名了一些变量并切换为驼峰式大小写以提高可读性

$nowDay = $arradate;
$nowTime = $nowtime;

$startDay = $start_day;
$startTime = $start_time;

$endDay = $end_day;
$endTime = $end_time;
Run Code Online (Sandbox Code Playgroud)