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
相关产品推荐
相关产品推荐

