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

如何在PHP中给指定日期加一个月?解决插入MySQL显示0000-00-00问题

解决PHP日期加一月后插入MySQL显示0000-00-00的问题

首先看你写的代码,问题出在strtotime()的参数顺序上!这个函数的第一个参数是相对/绝对时间字符串,第二个参数是可选的时间戳(作为计算的基准时间),你把日期字符串和相对时间的位置搞反了,导致生成的时间戳无效,插入数据库时就变成了无效的0000-00-00。

修正后的基础代码

你可以用两种方式正确调用strtotime():

方式1:把基准日期和相对时间拼接成一个字符串

$today = date("Y-m-d");
// 把"+1 month"和$today合并成一个时间表达式
$date1 = date('Y-m-d', strtotime("$today + 1 month"));

方式2:给strtotime传入基准时间戳作为第二个参数

$today = date("Y-m-d");
// 先把$today转成时间戳,作为计算的基准
$todayTimestamp = strtotime($today);
$date1 = date('Y-m-d', strtotime("+ 1 month", $todayTimestamp));

额外注意事项(避免再次出现0000-00-00)

  • 确认数据库字段类型:确保你插入的字段是DATE、DATETIME或者TIMESTAMP类型,而不是VARCHAR或者其他不兼容的类型。
  • 使用参数化查询:插入数据库时,尽量用PDO或者mysqli的参数绑定,不要直接拼接SQL语句,这样既避免SQL注入,也能保证日期格式被正确解析:
    示例(PDO):
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass');
    $stmt = $pdo->prepare("INSERT INTO your_table (date_column) VALUES (:date)");
    $stmt->bindParam(':date', $date1);
    $stmt->execute();
    
  • 处理特殊日期边界:比如如果今天是31号,加一个月可能会遇到没有对应日期的情况(比如1月31号加1月是2月28/29号),strtotime()会自动处理这种情况,如果你需要更精确的控制,可以使用DateTime类,它的操作更直观:
    $today = new DateTime();
    $today->modify('+1 month');
    $date1 = $today->format('Y-m-d');
    

内容的提问来源于stack exchange,提问作者michael mattanza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:03