首页 > 其他分享 >如何计算您已经连续签到几天

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

时间:2022-08-22 10:58:16浏览次数:45  
标签:签到 几天 如何 昨天 连续 计算 今天

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

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

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

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

标签:签到,几天,如何,昨天,连续,计算,今天
From: https://www.cnblogs.com/lizhaoyao/p/16612067.html

相关文章

  • 根据带宽计算网速
    五十兆宽带多少网速下载速度正常速率相当于1M/8=128KB/S,2M的网速就等于256KB/S50M=6400k/s=6.25M/S的下载速度50M的宽带相当于6.25M/S的下载速度已经很快了再扣掉点......
  • 1044 [HAOI2012]ROAD dijkstra递推求最短路径数+生成反向最短路拓扑图 计算以每个点为
     链接:https://ac.nowcoder.com/acm/contest/26077/1044来源:牛客网题目描述C国有n座城市,城市之间通过m条单向道路连接。一条路径被称为最短路,当......
  • 2022.8.21 四大函数式接口与Stream流式计算
    12、四大函数式接口(重点)   函数接口:只有一个方法的接口    @FunctionalInterface publicinterfaceRunnable{     publicabstractvoidrun(......
  • 计算几何笔记
    1并集记A,B是两个集合,以属于A或属于B的元素为元素的集合称为A与B的并(集),记作A∪B(或B∪A),读作“A并B”(或“B并A”),即A∪B={x|x∈A,或x∈B}。2交集记A,B是两个集合,以属于A且......
  • 2022 CCPC 华为云计算挑战赛
    95计费法数据比较小,然后也比较懒.一开始看着B题过的多就先去看B了,结果B愣是不理解题意耗费了很长时间,简短题意:给一个长度为n的序列a[1..n]a[1..n],将其分为m段(不......
  • 计算机自底向上(二):二进制减法
    在上一篇随笔中我们实现了一个位数任意多的二进制加法器,在这里我们进一步去考虑下一种运算:减法运算。事实上我们不需要一个减法逻辑;我们需要的是一个负号,因为A-B=A+(......
  • 使用线程池,并发计算1~50、51~100的和,再进⾏汇总统计。
    知识点:获取线程池、提交任务、获取返回值 获取线程池的几种方式:newFixedThreadPool(intnThreads)获取固定数量的线程池。参数:指定线程池中线程的数量。(使用这种)newC......
  • 计算机网络的五层模型和七层模型
    1.TCP/IP五层模型应用层:为应用程序提供网络通信,http协议,dns协议(域名对应ip),ftp协议(文件传输)传输层:实现端到端的通信,也就是主机到主机的通信,tcp协议,udp协议网络层:实现不同......
  • 企业利润计算
    #!/usr/bin/pythonimporttkinterfromtkinterimport*#定义一个对象top=Tk()#设置默认大小#top.geometry('600x300+10+10')'''企业发放的奖金根据利润提成......
  • 计算机思维
    三大思维1.理论思维(推理思维)2.实验思维(实证思维)3.计算机思维(构造思维)计算机思维的本质是抽象和自动化。计算思维是人类求解问题的一条途径,是属于人的思维方式,不是计算......