我有一个来自MySQL的日期范围,例如:2016-01-05至2016-01-10。我想检查一下周六和周日是否都在这个日期范围内,而不一定是连续的。到目前为止,我发现:
function isWeekend($date) {
return (date('N', strtotime($date)) >= 6);
}
所以我必须在这个范围内的每一天都循环,看看这是否是周末。
有什么更好的方法吗?
您不需要整天循环。你只需要知道日期范围的长度和一周中的第一天。
假设您有两个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')
返回diff
返回的DateInterval
中的总天数,format('w')
返回一周中的数字日期(Sunday=0)。
您不必每天都检查。
我试着用简单的英语来解释这一点:
首先,检查它是否在周末开始。如果是这样,你就已经完成了。如果日期跨度超过6天,那么您可以立即假设是的,包括周末。如果是5天,则的第一天为周一,否则包含周末。如果是四,就必须在星期二。。。等等。