gpt4 book ai didi

php - 如何检查 PHP 中多个日期范围之间的重叠?

转载 作者:可可西里 更新时间:2023-10-31 23:40:43 25 4
gpt4 key购买 nike

有很多关于检查两个日期重叠的帖子。但是我找不到任何关于如何在多个范围之间进行检查的讨论。

假设我有这个数组:

$ranges = [
array('start'=>'2014-01-01' , 'end'=> '2014-01-05'),
array('start'=>'2014-01-06' > , 'end'=> '2014-01-10'),
array('start'=>'2014-01-04' > , 'end'=> '2014-01-07')]

人们可能会简单地认为检查两个范围之间重叠的函数可以在所有范围之间使用循环,但这是错误的,因为所有范围可以相互重叠,但不能全部重叠。

我希望有人能帮我找到一个好的解决方案.....

最佳答案

以上解决方案对我来说都不起作用,我在这里使用 Carbon API 进行日期比较,但如果您不使用 Carbon API,这可以通过正常的 PHP 日期比较来实现。

PS:如果有人可以优化这段代码,我很高兴。

public static function checkOverlapInDateRanges($ranges) {
$overlapp = [];
for($i = 0; $i < count($ranges); $i++){
for($j= ($i + 1); $j < count($ranges); $j++){

$start = \Carbon\Carbon::parse($ranges[$j]['start']);
$end = \Carbon\Carbon::parse($ranges[$j]['end']);

$start_first = \Carbon\Carbon::parse($ranges[$i]['start']);
$end_first = \Carbon\Carbon::parse($ranges[$i]['end']);

if(\Carbon\Carbon::parse($ranges[$i]['start'])->between($start, $end) || \Carbon\Carbon::parse($ranges[$i]['end'])->between($start, $end)){
$overlapp[] = $ranges[$j];
break;
}
if(\Carbon\Carbon::parse($ranges[$j]['start'])->between($start_first, $end_first) || \Carbon\Carbon::parse($ranges[$j]['end'])->between($start_first, $end_first)){
$overlapp[] = $ranges[$j];
break;
}
}
}
return $overlapp;
}

关于php - 如何检查 PHP 中多个日期范围之间的重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com