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

PHP中为选中日期添加1年失败,求可行实现方法

解决PHP中日期加1年失效的问题

你的问题根源在于strtotime对d/m/Y格式的日期解析存在歧义——它默认会把这类日期当作m/d/Y(月/日/年)来处理,一旦日期中的“日”大于12(比如31/12/2023),strtotime就会解析失败返回false,最终date函数只能输出1970年的默认日期。

下面给你两种可靠的解决方案:

方法一:使用DateTime类(推荐)

DateTime类对自定义日期格式的支持更友好,能完全避免解析歧义,还能自动处理闰年2月29日这类特殊情况:

// 获取并转义用户输入的日期
$sdate = mysqli_real_escape_string($conn, $_POST['amc_date']);

// 按d/m/Y格式解析日期
$dateObj = DateTime::createFromFormat('d/m/Y', $sdate);

if ($dateObj) {
    // 添加1年
    $dateObj->add(new DateInterval('P1Y'));
    // 格式化为d/m/Y输出
    $edate = $dateObj->format('d/m/Y');
} else {
    // 处理日期格式无效的情况
    $edate = "请输入有效的日期(格式:日/月/年)";
}

方法二:转换日期格式后用strtotime

如果你更习惯用strtotime函数,可以先把d/m/Y转换成Y-m-d(strtotime能稳定识别的标准格式):

$sdate = mysqli_real_escape_string($conn, $_POST['amc_date']);

// 拆分日、月、年,重新组合为Y-m-d格式
list($day, $month, $year) = explode('/', $sdate);
$standardDate = "$year-$month-$day";

// 添加1年后再转回d/m/Y格式
$edate = date('d/m/Y', strtotime('+1 year', strtotime($standardDate)));

额外说明

如果遇到闰年2月29日的情况,DateTime类会自动将其转换为次年的2月28日,这是符合常规日期逻辑的处理方式。

内容的提问来源于stack exchange,提问作者Ayan Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:14