开发一个签到模块,签到周期为30天,现有需求连续签到多少天后有奖励可以领取,如果中间有一天断签,则记连续签到从0开始,每30天算一个周期,如何判断是否连续,并判断连续的时长满不满足要求
6 回答
![?](http://img1.sycdn.imooc.com/545866c40001561502200220-100-100.jpg)
白板的微信
TA贡献1883条经验 获得超3个赞
不能换一种思路吗?
比如单独设计一个 XX签到表
字段:id-uid-time
用户签到动作时:
- 今天是否已签到过? Y -> false;
- 签到。(写入一条新数据到库中)
- 判断是否连续 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;
所以,重点还是思路。。。
![?](http://img1.sycdn.imooc.com/5458643d0001a93c02200220-100-100.jpg)
UYOU
TA贡献1878条经验 获得超4个赞
签到的时候拿出上一次签到的日期
如果是昨天以前肯定断了
如果是昨天,今天签到,那就接上了
另外数据表新增一个连续签到天数,只要没断,就在上次的基础上加1,断了就重新来
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
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")); // 返回值是当前日期的前一天
- 6 回答
- 0 关注
- 671 浏览
添加回答
举报
0/150
提交
取消