gpt4 book ai didi

php - 涵盖输入日期范围所有日期的日期范围组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:01 25 4
gpt4 key购买 nike

我想找到与输入日期范围重叠的所有可能的日期范围组合。例如,如果用户输入 2013/01/10 到 2013/01/25 并且我有以下日期范围:

2013/01/08 to 2013/01/10
2013/01/09 to 2013/01/15
2013/01/10 to 2013/01/20
2013/01/18 to 2013/01/27
2013/01/14 to 2013/01/19
2013/01/19 to 2013/01/25
2013/01/14 to 2013/01/26
2013/01/10 to 2013/01/26

我想找到与输入日期( 2013/01/10 到 2013/01/25 )重叠的上述日期的所有可能组合。

与输入日期重叠的日期范围的两个示例是:

{2013/01/09 to 2013/01/15, 2013/01/14 to 2013/01/26}
{2013/01/09 to 2013/01/15, 2013/01/14 to 2013/01/19, 2013/01/19 to 2013/01/25}

我没有列出与输入日期范围重叠的所有可能日期范围!
我想找到涵盖输入日期范围所有天数的日期范围组合!如果你看两个例子,我将日期范围组合起来以覆盖输入日期的所有天数!
我不想检查一个日期和输入日期范围两个发现如果日期范围涵盖输入日期的所有天数或否!,我想组合日期范围以查找涵盖所有天数的所有可能日期范围组合输入日期范围。
我想要一种算法来查找涵盖输入日期范围所有日期的所有可能的日期组合。有没有解决这个问题的快速算法?

最佳答案

我不太确定为什么 2013-01-09 to 2013-01-15如果您能找到 2013-01-09 to 2013-01-15,则列表中缺少但您可以根据需要在下面修改此类

$range = [
new DateManager("2013/01/08", "2013/01/10"),
new DateManager("2013/01/09", "2013/01/15"),
new DateManager("2013/01/10", "2013/01/20"),
new DateManager("2013/01/18", "2013/01/27"),
new DateManager("2013/01/14", "2013/01/19"),
new DateManager("2013/01/19", "2013/01/25"),
new DateManager("2013/01/14", "2013/01/26"),
new DateManager("2013/01/10", "2013/01/26")
];

$find = new DateManager("2013/01/10", "2013/01/25");

foreach($range as $date) {
$find->overlap($date) && print($date->getRange() . PHP_EOL);
}

输出

2013/01/09 to 2013/01/15 
2013/01/10 to 2013/01/20
2013/01/14 to 2013/01/19
2013/01/19 to 2013/01/25

class DateManager {
private $start, $end;

function __construct($start, $end, $format = "Y/m/d") {
$this->start = $start instanceof DateTime ? $start : DateTime::createFromFormat($format, $start);
$this->end = $end instanceof DateTime ? $end : DateTime::createFromFormat($format, $end);
}

function getStart() {
return $this->start;
}

function getEnd() {
return $this->end;
}

function getRange($format = "Y/m/d") {
return sprintf("%s to %s ", $this->start->format($format), $this->end->format($format));
}

function between(DateManager $date) {
return $date->getStart() >= $this->getStart() && $this->getEnd() <= $date->end;
}

function overlap(DateManager $date) {
return (($date->getStart() >= $this->getStart() || $date->getEnd() > $this->getStart()) && $this->getEnd() >= $date->getEnd());
}
}

关于php - 涵盖输入日期范围所有日期的日期范围组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17487301/

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