我有两个日期时间间隔,我想确定它们之间的重叠时间段。例如,如果我有间隔:
我需要检索公共区间,在本例中为
10-12-2023 11:00:00
到 12-12-2023 15:00:00
。我如何在 PHP 中实现这一点,无论是使用本机函数还是像 Carbon 这样的库?
这是我的代码:
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;
$range1Start = Carbon::parse('2023-12-01 01:00:00');
$range1End = Carbon::parse('2023-12-12 15:00:00');
$range2Start = Carbon::parse('2023-12-10 11:00:00');
$range2End = Carbon::parse('2023-12-24 16:00:00');
if ($range1Start->lessThan($range2End) && $range2Start->lessThan($range1End)) {
// Calculate the overlapping period
$overlapStart = $range1Start->max($range2Start);
$overlapEnd = $range1End->min($range2End);
echo "Overlap: {$overlapStart->toDateTimeString()} to {$overlapEnd->toDateTimeString()}\n";
} else {
echo "No overlap.\n";
}
您可以遵循一个简单的算法:
这是一个实现示例:
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;
$range1Start = Carbon::parse('2023-12-01 01:00:00');
$range1End = Carbon::parse('2023-12-12 15:00:00');
$range2Start = Carbon::parse('2023-12-10 11:00:00');
$range2End = Carbon::parse('2023-12-24 16:00:00');
$maxStart = $range1Start->max($range2Start);
$minEnd = $range1End->min($range2End);
if ($maxStart->lessThan($minEnd)) {
echo "Overlap: {$maxStart->toDateTimeString()} to {$minEnd->toDateTimeString()}\n";
} else {
echo "No overlap.\n";
}