【问题标题】:Given period at least covers one night on the weekend指定期间至少包括周末的一晚
【发布时间】:2016-01-19 13:10:13
【问题描述】:

我需要检查给定的时间段是否至少涵盖周末的一晚(周六晚上或周日晚上)(请参阅wiki article 了解规则)。

我找到this question那个,如何查看日期是否是周末,

function isWeekend($date) {
    $weekDay = date('w', strtotime($date));
    return ($weekDay == 0 || $weekDay == 6);
}

但我仍然在为如何实现一个函数来获得给定时期的以下样本结果而苦恼,

示例期间和结果:

04-01-2016 / 07-01-2016 : false
04-01-2016 / 09-01-2016 : false
04-01-2016 / 10-01-2016 : true (covers saturday night)
03-01-2016 / 07-01-2016 : true (covers sunday night)
04-01-2016 / 14-01-2016 : true (covers a full weekend)

规则应终止开始日期是周末或结束日期是周日或整个周末。

【问题讨论】:

  • 所以,循环从一个时期的开始到结束的日期,并检查。 (一旦你发现第一个周六或周日晚上被覆盖,你就可以结束循环了。)
  • @CBroe 正在努力,感谢您的提示

标签: php date period


【解决方案1】:

我想你正在寻找这样的东西:

function coversWeekend($start, $end) {
    $weekend       = [0, 6]; // 0 for Sunday, 6 for Saturday.

    // Loop over the date period.
    while ($start < $end) {
        if (in_array($start->format('w'), $weekend)) {
            return true;
        }

        $start->modify('+1 day');
    }

    return false;   
}

请注意,没有对用户传入的内容进行验证。您可能需要检查是否为每个参数传递了有效的 DateTime 对象。

希望对您有所帮助。

编辑:根据@honzalilak 的反馈更新了解决方案。

【讨论】:

  • 小改进:您可以在 if 部分返回 true 而不是将其分配给变量,并在与周末匹配时立即结束循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2016-07-11
  • 2011-04-06
相关资源
最近更新 更多