You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何设置产品过期、无效状态?代码逻辑异常求助

问题排查:带有效期的产品状态判断逻辑错误

先理清楚你的需求逻辑,正确的状态划分应该是:

  • Not Valid:当前时间超过产品有效期($now > $valid)
  • Overdue:当前时间在有效期内,但距离过期不足30天($due < $now < $valid,其中$due是$valid往前推30天的日期)
  • 有效状态:当前时间距离过期还有30天及以上($now <= $due)

看你的代码,核心问题是条件判断完全写反了,直接导致逻辑彻底混乱:

  1. 第一个条件if ($due > $now && $now > $valid):因为$due是$valid减去30天得到的,所以$due必然小于$valid,$now不可能同时大于$valid且小于$due,这个分支永远不会触发。
  2. 第二个条件elseif ($due > $now && $now < $valid):这个分支匹配的是「当前时间距离过期还有30天以上」的情况,但你却把它标记成了Not Valid,完全和需求相反。
  3. 所有本该显示Not Valid的场景,最终都落到了else分支里,自然不符合预期。

修正后的代码

这里建议你优先用时间戳做日期比较,因为字符串格式(比如d-M-y)的日期比较可能会因格式解析、本地化问题出错,用整数类型的时间戳更可靠:

// 先把日期字符串转换为时间戳,避免字符串比较的坑
$nowTimestamp = strtotime(date("d-M-y"));
$validTimestamp = strtotime($valid);
$dueTimestamp = strtotime($due);

if ($nowTimestamp > $validTimestamp) {
    // 超过有效期 → Not Valid
    $vendor = '<td style="color:red;text-align: center;font-weight: bold">'.$rowpur['ven_code'].' (Not Valid)</td>';
} elseif ($nowTimestamp > $dueTimestamp && $nowTimestamp <= $validTimestamp) {
    // 有效期内,但不足30天过期 → Overdue
    $vendor = '<td style="color:red;text-align: center;font-weight: bold">'.$rowpur['ven_code'].' (Overdue)</td>';
} else {
    // 距离过期还有30天及以上 → 有效状态
    $vendor = '<td style="text-align: center;font-weight: bold">'.$rowpur['ven_code'].'</td>';
}

额外优化建议

可以把状态判断逻辑封装成独立函数,方便复用和后续维护:

function getVendorStatus($nowStr, $validStr, $dueStr) {
    $nowTs = strtotime($nowStr);
    $validTs = strtotime($validStr);
    $dueTs = strtotime($dueStr);
    
    if ($nowTs > $validTs) return 'Not Valid';
    if ($nowTs > $dueTs) return 'Overdue';
    return 'Valid';
}

// 调用示例
$status = getVendorStatus(date("d-M-y"), $valid, $due);
$style = $status !== 'Valid' ? 'color:red;' : '';
$vendor = "<td style='{$style}text-align: center;font-weight: bold'>{$rowpur['ven_code']} ({$status})</td>";

内容的提问来源于stack exchange,提问作者Franksye Sipangkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:12:01