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());
}
}