如何计算您已经连续签到几天
在简单的签到记录表中,如何快速计算您已经连续签到几天?
假如你已经拿到了所有的签到记录日期类似于
<?php $list = [ '2022-08-21', '2022-08-20', '2022-08-19', '2022-08-12' ];
该如何判断呢?
写个函数
<?php function calc_num(array $list = []) { if (empty($list)) { return 0; } $num = 1; $today = date('Y-m-d'); $flag = 0; if (!in_array($today, $list)) { array_unshift($list, $today); $flag = -1; } $count = count($list); for ($i = 1; $i < $count; $i++) { if (strtotime($list[$i - 1]) - strtotime($list[$i]) != 86400) { break; } $num++; } return $num + $flag; }
传入签到的记录日期数组,得到计算结果您已经连续签到xx天.
这里需要明确一点,如果昨天今天都没有签到 则设定为0.
昨天没签到今天签到了,就是连续1天.
昨天签到了今天没签到,也是连续1天.
昨天签到了今天也签到,就是连续2天.
前天签到了昨天签到了,今天没签到,就是连续2天.
前天签到了昨天签到了,今天也签到,就是连续3天.
所以应该把今天也算在内.最后看今天有没有签到如果没有则减1
或者采用另外一种算法
先判断昨天和今天是不是签到了, 如果都没有则立即返回0
<?php function calc_num2(array $list = []) { if (empty($list)) { return 0; } $diff = strtotime(date('Y-m-d')) - strtotime($list[0]); if ($diff != 0 && $diff != 86400) { return 0;//昨天和今天都没签到 则返回0 } $num = 1; $count = count($list); for ($i = 1; $i < $count; $i++) { if (strtotime($list[$i - 1]) - strtotime($list[$i]) != 86400) { break; } $num++; } return $num; }
这个写法稍微好理解点后面就是计算连续的次数自增就行