【发布时间】:2022-02-18 00:43:36
【问题描述】:
我需要检查开始/结束日期是否在一个日期范围内,并且它们之间没有丢失日期/中断/漏洞。
$dates_list 可能很大(包含多年的天数),因此性能很重要。如果需要,可以使用最新的 PHP 8.1。
我的 $dates_list 已经在数组中按时间顺序排列。
<?php
function dates_in_consecutive_range(string $start_date, string $end_date, array $dates_list): bool {
// If in consecutive range without missing days (holes), return true, else return false
// If either $start_date or $end_date or both is not in $dates_list, return false
return false;
}
$dates_list = [
'2022-03-11',
'2022-03-12',
'2022-03-13',
'2022-03-14',
'2022-03-18',
'2022-03-19',
];
$start_date = '2022-03-11';
$end_date = '2022-03-14';
var_dump(dates_in_consecutive_range($start_date, $end_date, $dates_list)); // true
$start_date = '2022-03-11';
$end_date = '2022-03-18';
var_dump(dates_in_consecutive_range($start_date, $end_date, $dates_list)); // false
$start_date = '2022-03-18';
$end_date = '2022-03-19';
var_dump(dates_in_consecutive_range($start_date, $end_date, $dates_list)); // true
$start_date = '2022-03-19';
$end_date = '2022-03-20';
var_dump(dates_in_consecutive_range($start_date, $end_date, $dates_list)); // false ($end_date not in $dates_list)
【问题讨论】: