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

PHP根据用户选择天数计算日期异常:始终显示1970-01-01求助

解决日期计算返回1970-01-01的问题

这个问题我之前踩过坑,1970-01-01是Unix时间戳的起始日期,出现这个结果说明你的strtotime()调用返回了false,导致date()函数解析成了0时间戳对应的日期。下面是几个关键修复步骤:

  • 先处理无效的表单输入:
    你的下拉框第一个选项值是"Select",如果用户没选具体天数就提交,$_POST["days"]会是这个字符串,strtotime根本无法解析"当前日期 + Select"这种格式,直接返回false。所以必须在PHP里验证输入是否有效:

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $days = $_POST["days"];
        // 只允许选中指定的天数选项
        if (in_array($days, ['7', '14', '21', '28'])) {
            $currentDate = date("Y-m-d");
            // 加上"days"关键词让strtotime解析更稳妥
            $newDate = date('Y-m-d', strtotime($currentDate . ' + ' . $days . ' days'));
            echo $newDate;
        } else {
            echo "请选择有效的天数";
        }
    }
    
  • 避免页面首次加载时执行计算逻辑:
    当页面第一次打开时,没有POST请求,$_POST["days"]是不存在的,这时候直接执行日期计算会导致strtotime报错。上面的代码用$_SERVER['REQUEST_METHOD'] === 'POST'判断只有表单提交时才执行逻辑,完美解决这个问题。

  • 优化前端体验(可选):
    可以给下拉框加上required属性并把默认选项设为禁用,让浏览器强制用户选择有效天数后才能提交,减少无效请求:

    <select name="days" style="width: 270px" required>
        <option value="" disabled selected>Select</option>
        <option value="7">7</option>
        <option value="14">14</option>
        <option value="21">21</option>
        <option value="28">28</option>
    </select>
    

把这些修改结合起来,你就能得到正确的日期计算结果了。

内容的提问来源于stack exchange,提问作者Justin Chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:28