我的日期范围来自MySQL,例如: 2016-01-05至2016-01-10 。我想检查周六和周日是否在该日期范围内,不一定是连续的。到目前为止,我发现:
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
}
因此,我必须在该范围内的每一天进行循环,看看它是否是周末。
有没有更好的方法?
答案 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,那么 将在星期二......依此类推。