0
点赞
收藏
分享

微信扫一扫

如何计算您已经连续签到几天

愚鱼看书说故事 2022-10-12 阅读 107

在简单的签到记录表中,如何快速计算您已经连续签到几天?

假如你已经拿到了所有的签到记录日期类似于

<?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;
}

这个写法稍微好理解点后面就是计算连续的次数自增就行



举报

相关推荐

0 条评论