如何使用PHP计算剩余天数(从数据库读取到期日)
计算到期剩余≤30天的客户数量
你的SQL语句存在几个明显问题:
strtotime是PHP函数,不能直接嵌入SQL语句中执行- 语法错误:括号不匹配,还有错误的
.符号(函数调用应该用()而非.) - 直接在SQL里使用PHP的
time()不合适,应改用数据库的当前时间函数
推荐写法(MySQL数据库)
直接用数据库内置日期函数计算,效率更高:
$sql = "SELECT COUNT(id) AS total FROM clients WHERE TIMESTAMPDIFF(DAY, NOW(), due_date) <= 30 AND due_date >= NOW()"; $result = mysqli_query($con, $sql); $values = mysqli_fetch_assoc($result); $num_rows = $values['total']; echo $num_rows;
TIMESTAMPDIFF(DAY, NOW(), due_date):计算当前时间到到期日的天数差- 追加
due_date >= NOW()是为了排除已过期的记录,若需要统计包含过期(剩余天数为负)的情况,可去掉该条件
备选写法(PHP端处理,不推荐)
若一定要在PHP中计算日期,需先拉取所有到期日数据再处理:
$sql = "SELECT due_date FROM clients"; $result = mysqli_query($con, $sql); $count = 0; $currentTime = time(); while ($row = mysqli_fetch_assoc($result)) { $dueTime = strtotime($row['due_date']); $remainingDays = round(($dueTime - $currentTime) / (24 * 60 * 60)); if ($remainingDays <= 30) { $count++; } } echo $count;
这种方式需要将全量数据拉到PHP端处理,数据量大时性能较差,优先选择数据库端计算方案。
内容的提问来源于stack exchange,提问作者Erick Boniventure
相关产品推荐
相关产品推荐

