PHP实现用户每日限取1条视频(100天有效期)功能技术求助
解决PHP中用户视频每日获取限制与权限有效期问题
嘿,我来帮你搞定这个需求!你要实现的是用户从视频库每日仅能获取1条视频,且权限有效期为加入日期起100天,用strtotime()完全可以实现,我给你拆解成两个核心部分来做:
一、先处理权限有效期判断
首先得确认用户的权限是否还在100天有效期内。我们可以利用strtotime()直接计算出用户加入日期后100天的时间戳,再和当前时间戳对比就行:
- 假设数据库里存的用户加入日期是
Y-m-d格式(比如2024-01-01) - 用
strtotime($joinDate . ' +100 days')就能算出到期的时间戳 - 把这个到期时间戳和当前时间
time()对比,如果当前时间已经超过,就说明权限过期了
二、再处理每日获取限制
这部分需要记录用户最后一次获取视频的日期,判断今天和这个日期是否相同:
- 数据库里新增一个字段(比如
last_video_date),用来存用户最后拿视频的日期,初始值可以设为null或空字符串 - 把今天的日期格式化为
Y-m-d(和数据库存的格式统一),和用户的last_video_date对比,如果相同,就说明今天已经拿过了
完整代码示例
下面是整合后的PHP代码,你可以根据自己的数据库操作方式调整:
// 模拟从数据库获取用户数据(实际项目中替换为你的查询逻辑) $userId = 1; $joinDate = '2024-01-15'; // 用户加入日期,格式Y-m-d $lastVideoDate = '2024-04-23'; // 用户最后获取视频的日期,初始可为null // 1. 检查权限是否过期 $expireTime = strtotime($joinDate . ' +100 days'); $currentTime = time(); if ($currentTime > $expireTime) { echo "抱歉,你的视频获取权限已过期(有效期为加入之日起100天)"; exit; } // 2. 检查今日是否已获取过视频 $today = date('Y-m-d'); if ($lastVideoDate === $today) { echo "今日已获取过1条视频,请明天再来哦"; exit; } // 3. 允许获取视频,同时更新最后获取日期到数据库 // 这里以PDO为例,替换为你实际的数据库操作 // $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass'); // $stmt = $pdo->prepare("UPDATE users SET last_video_date = ? WHERE id = ?"); // $stmt->execute([$today, $userId]); echo "成功获取视频!";
关键细节说明
strtotime()的灵活性:它能自动处理日期的进位(比如跨月、跨年),不用你手动计算天数,非常省心- 日期格式统一:一定要用
Y-m-d这种标准格式来存储和对比,避免因为时间部分(比如时分秒)导致的判断错误 - 边界情况:如果用户当天第一次获取视频,
last_video_date为空或null,这时候判断条件会不成立,就能正常允许获取
内容的提问来源于stack exchange,提问作者Komal
相关产品推荐
相关产品推荐

