我在PHP中有多个间隔,我想知道连续间隔中的最大end_date是什么。
示例1(我们有3个间隔):
start_date - end_date
2017-01-01 - 2018-01-01
2018-01-01 - 2019-01-01
2019-02-01 - 2020-02-01
功能结果是2019-01-01,因为我们的日期一直持续到那里。然后有1个月的差距。
示例2(5个间隔):
start_date - end_date
2017-01-01 - 2017-02-01
2017-01-05 - 2017-01-10
2017-01-30 - 2017-02-05
2017-02-03 - 2017-02-04
2017-02-08 - 2017-02-12
这里的结果是2017-02-05
我不确定是否有一些有用的功能。我试图在没有任何解决方案的情况下搜索间隔或类似的内容。
感谢您提供任何线索。
答案 0 :(得分:0)
使用date_diff()
功能:
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
答案 1 :(得分:0)
我在PHP中找不到任何有用的东西或任何线索,所以我自己编程:
<?php
$example1 = [
['start' => '2017-01-01', 'end' => '2018-01-01'],
['start' => '2018-01-01', 'end' => '2019-01-01'],
['start' => '2019-02-01', 'end' => '2020-02-01']
];
$example2 = [
['start' => '2017-01-01', 'end' => '2017-02-01'],
['start' => '2017-01-05', 'end' => '2017-01-10'],
['start' => '2017-01-30', 'end' => '2017-02-05'],
['start' => '2017-02-03', 'end' => '2017-02-04'],
['start' => '2017-02-08', 'end' => '2017-02-12']
];
// @param intervals are ordered by start date
function getMaxContinuingEndDate($intervals)
{
if (empty($intervals)) return NULL;
$result = ['start' => $intervals[0]['start'], 'end' => $intervals[0]['end']];
foreach($intervals as $interval) {
if ($interval['start'] <= $result['start'] && $interval['end'] >= $result['start']) {
$result['start'] = $interval['start'];
}
if ($interval['end'] >= $result['end'] && $interval['start'] <= $result['end']) {
$result['end'] = $interval['end'];
}
}
return $result['end'];
}
echo getMaxContinuingEndDate($example1);
echo "\n";
echo getMaxContinuingEndDate($example2);