需求:需要计算这个时间数组的最大连续天数,9号到11号有连续三天,但是12号断开了,15号到18是一个连续的四天,所以计算结果应该是最大连续天数是 4 天.
$dates = [
'2018-10-09',
'2018-10-10',
'2018-10-11',
'2018-10-13',
'2018-10-15',
'2018-10-16',
'2018-10-17',
'2018-10-18',
];
方法封装
/**
* 求出最大连续天数
*/
if (!function_exists("continue_days")){
function continue_days($time_array=null){
$list_length = count($time_array);
$continue_days = 1;
$continue_days_array = [];
for($i = 0;$i < $list_length;$i++){
$today = strtotime($time_array[$i]);
if($i == $list_length -1){
$continue_days_array[] = $continue_days;
}else{
$yesterday = strtotime($time_array[$i + 1]);
$one_day = 24 * 3600;
if($today - $yesterday == $one_day){
$continue_days += 1;
}else{
$continue_days_array[] = $continue_days;
$continue_days = 1;
}
}
}
if (count($continue_days_array) > 0){
$max_days = max($continue_days_array);
}else{
$max_days = 0;
}
return $max_days;
// var_dump($continue_days_array);
}
}
使用示例
$router->get('/', function () use ($router) {
$dates = [
'2018-10-09',
'2018-10-10',
'2018-10-11',
'2018-10-13',
'2018-10-15',
'2018-10-16',
'2018-10-17',
'2018-10-18',
];
dd(continue_days(array_reverse($dates)));
});

本文介绍了一种计算给定日期数组中最大连续天数的方法。通过遍历日期数组,将每个日期转换为时间戳并比较相邻日期的时间差,以此判断是否连续。最终,该方法返回数组中找到的最大连续天数。
3842

被折叠的 条评论
为什么被折叠?



