如何验证日期范围是否包含周末?

时间:2016-07-20 16:11:53

标签: php date datetime

我的日期范围来自MySQL,例如: 2016-01-05至2016-01-10 。我想检查周六和周日是否在该日期范围内,不一定是连续的。到目前为止,我发现:

function isWeekend($date) {
    return (date('N', strtotime($date)) >= 6);
}

因此,我必须在该范围内的每一天进行循环,看看它是否是周末。

有没有更好的方法?

2 个答案:

答案 0 :(得分:1)

你不需要在所有日子里循环。您只需要知道日期范围的长度和一周的第一天。

假设您有两个DateTime个对象:

$start = new DateTime('2016-01-05');
$end = new DateTime('2016-01-10');

您可以通过检查范围的长度加上开始日期的数字工作日是否大于6来确定星期六和星期日是否包含在日期范围内。

function includes_weekend (DateTime $start, DateTime $end) {
    return $start->diff($end)->format('%a') + $start->format('w') > 6;
}

format('%a')返回DateInterval返回的diff天的总天数,format('w')返回星期几的数字日(星期日= 0)。

答案 1 :(得分:0)

您不必每天检查一次。

我试着用简单的英语来解释这个:

首先,检查它是否在周末开始。如果是的话,你已经完成了。如果日期跨度超过6天,那么您可以立即假设是,包括周末日。如果是5天,则的第一天在星期一,否则它包含周末。如果它是4,那么 将在星期二......依此类推。