php - 如何在特定时间段内在 php 中显示任何内容?

标签 php date if-statement time 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"};

例如 ,让我们假设用户输入 $start_daysun$start_time143400 $end_daywed $end_time140000
上述持续时间意味着我们在范围内,它应该显示我们想要显示的任何内容,直到明天下午 2 点,因为明天是星期三。我在 EST。

我正在使用以下代码来 拉取当前星期几和时间 :
date_default_timezone_set('America/Toronto');
$arradate = strtolower(date('D'));
$nowtime = (int)date('His');

问题陈述:

我想知道如果我需要使用逻辑来打印任何东西怎么办 Sunday 143400Wednesday 140000 .
if()    {
    echo "Its in range";
}

案例:
  • 如果覆盖应该从周一上午 8 点应用到周一下午 6 点 今天是星期三 那么覆盖不适用。
  • 如果是星期一下午 6 点和星期五下午 6 点,则覆盖将适用于 周一6小时 , 周二全天 , 周三全天 , 周四全天 , 周五至下午 6 点
  • 如果是周日下午 6 点和周一下午 6 点,则覆盖将适用于 周一6小时周一18小时 .
  • 如果是星期二下午 6 点和星期五下午 6 点和 今天是周二晚上 9 点 然后将应用覆盖。
  • 如果是星期四下午 6 点和星期三下午 6 点,则覆盖将适用于 周四 6 小时 , 周五24小时 , 周六24小时 , 周日24小时 , 周一24小时 , 周二24小时 , 周三24小时周四18小时 .
  • 最佳答案

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

    我建议设置一个涵盖两周的引用天数数组

    $days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];
    $days = array_merge($days, $days);
    

    将其切片,使其从起点的那一天开始(它将从 0 重新索引)
    $days = array_slice($days, array_search($startDay, $days));
    

    然后,您可以为现在和终点构建一个引用整数
    $nowRef = (int) (array_search($nowDay, $days) . $nowTime);
    $endRef = (int) (array_search($endDay, $days) . $endTime);
    

    请注意,您可以对起点执行相同操作,但由于 days 数组以 $startDay 开头。 (索引 0)这相当于 $startTime
    你的 if 条件就变成了
    if ($nowRef >= $startTime && $nowRef <= $endRef) {
       // IN RANGE
    }
    

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

    你的命名约定有点不一致,所以我重命名了你的一些变量并切换到驼峰式以提高可读性
    $nowDay = $arradate;
    $nowTime = $nowtime;
    
    $startDay = $start_day;
    $startTime = $start_time;
    
    $endDay = $end_day;
    $endTime = $end_time;
    

    关于php - 如何在特定时间段内在 php 中显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151753/

    相关文章:

    java - 使用 LocalDate 将一个日期更改为另一种日期格式

    php - 将发布日期与 Codeigniter 中的时间戳进行比较

    php - 每个循环多个ajax php请求

    javascript - 检查时间是否在2个时间之间

    bash - 在 Bash 的 'if' 循环中使用 'while'

    python - while 语句之后的 else 语句,以及字符串与字符串列表的比较?

    c# - C# 中的两个 ifs 和一个 else。会发生什么?

    php - Laravel HMVC 路由到 Controller

    PHP APC 缓存还是不缓存?

    php - 仅当 mysql 中不存在时才显示