Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证日期范围是否包括周末?_Php_Date_Datetime - Fatal编程技术网

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

Php 如何验证日期范围是否包括周末?,php,date,datetime,Php,Date,Datetime,我有一个来自MySQL的日期范围,例如: 2016-01-05至2016-01-10。我想检查周六和周日是否都在该日期范围内,不一定是连续的。到目前为止,我发现: function isWeekend($date) { return (date('N', strtotime($date)) >= 6); } 因此,我必须在范围内的每一天循环,看看这是否是周末 有更好的方法吗?你不必每天都检查 我将尝试用简单的英语解释这一点: 首先,检查它是否在周末开始。如果成功了,你已经成功了。

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

function isWeekend($date) {
    return (date('N', strtotime($date)) >= 6);
}
因此,我必须在范围内的每一天循环,看看这是否是周末


有更好的方法吗?

你不必每天都检查

我将尝试用简单的英语解释这一点:


首先,检查它是否在周末开始。如果成功了,你已经成功了。如果日期跨度超过6天,则可以立即假定是,包括周末。如果是5天,那么第一天必须在周一,否则它包含一个周末。如果是四点,就必须在星期二。。。等等

你不需要整天重复。您只需要知道日期范围的长度和一周中的第一天

假设您有两个
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')
返回一周中的数字日(星期日=0)。

日期是否总是短于7天?@Ares有时,日期可以是任意长度的天。谢谢你的回复,但你的逻辑是错误的。如果我的约会范围从星期六开始到星期二结束,第一天永远不会是星期一。对不起,我应该澄清一下。总是检查第一天是否是周末。这将消除边缘情况。