为了账号安全,请及时绑定邮箱和手机立即绑定

php如何判断27,28,29,30,1,2,3,5类似这样的一串日期是否连续,需要处理好跨年跨月闰月的问题?

php如何判断27,28,29,30,1,2,3,5类似这样的一串日期是否连续,需要处理好跨年跨月闰月的问题?

PHP
largeQ 2019-03-08 23:30:11
开发一个签到模块,签到周期为30天,现有需求连续签到多少天后有奖励可以领取,如果中间有一天断签,则记连续签到从0开始,每30天算一个周期,如何判断是否连续,并判断连续的时长满不满足要求
查看完整描述

6 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

不能换一种思路吗?

比如单独设计一个 XX签到表
字段:id-uid-time

用户签到动作时:

  1. 今天是否已签到过? Y -> false;
  2. 签到。(写入一条新数据到库中)
  3. 判断是否连续 X 天签到? Y -> 发放奖励。

至于如何判断连续 7 天签到,我这提供一个思路,仅供参考:
判断用户签到表中最近 7 条数据是否均为 7 天内的数据。哈哈逃(其实是可行的)。

    // 获取7天前的凌晨的时间戳
    $seven_days_ago = strtotime('-7 days');
    $seven_days_ago = mktime(0, 0, 0, date('m', $seven_days_ago), date('d', $seven_days_ago), date('Y', $seven_days_ago));
    echo $seven_days_ago;

所以,重点还是思路。。。

查看完整回答
反对 回复 2019-03-18
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

将相邻的日期换算成格林尼治毫秒数相减 如果等于86400000说明连着打卡了 大于说明中断

查看完整回答
反对 回复 2019-03-18
?
UYOU

TA贡献1878条经验 获得超4个赞

签到的时候拿出上一次签到的日期

如果是昨天以前肯定断了
如果是昨天,今天签到,那就接上了

另外数据表新增一个连续签到天数,只要没断,就在上次的基础上加1,断了就重新来

查看完整回答
反对 回复 2019-03-18
?
手掌心

TA贡献1942条经验 获得超3个赞

只需把上次签到和本次签到的日期对比一下就可以了吧。

查看完整回答
反对 回复 2019-03-18
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

date_diff可以得出两个日期相距的天数,将之与大于某个日期的打卡次数比较,就知道这段日期内是否有打满卡

查看完整回答
反对 回复 2019-03-18
?
PIPIONE

TA贡献1829条经验 获得超9个赞

在做签到累加的时候就做判断,当前签到的日期是不是最后签到日期+1,如果是那就做累加,不是就重置为0
至于如何判断“当前签到的日期等于最后签到日期+1”,给你个示例代码:

$lastDateHistory = '2012-02-29'; // 假设这是从记录中取出的最后一次签到日期
$currentDate = '2012-03-01'; // 手动假写当前日期,实际应该等于 date('Y-m-d');
echo date('Y-m-d',strtotime("$currentDate -1 day")); // 返回值是当前日期的前一天

查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 671 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信