You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

PHP日期格式转换问题:输入15/01/1995转1995-01-15失败求助

解决dd/mm/yyyy转Y-m-d时strtotime返回1970-01-01的问题

这种情况我太熟悉了!strtotime()dd/mm/yyyy 格式的日期识别存在歧义——它默认会把这种格式当成 mm/dd/yyyy,而15显然不是有效的月份,所以解析失败返回时间戳0,对应输出就是1970-01-01。这里给你几个靠谱的解决方法:

方法一:使用DateTime类(推荐,最可靠)

DateTime类的createFromFormat方法可以精准指定输入日期的格式,完全避免歧义:

// 按输入格式解析日期
$dateObj = DateTime::createFromFormat('d/m/Y', $Data['date']);
// 转换为目标格式
$date_format = $dateObj->format('Y-m-d');

如果担心输入日期无效,还可以加上异常处理:

try {
    $dateObj = DateTime::createFromFormat('d/m/Y', $Data['date']);
    $errors = DateTime::getLastErrors();
    if ($errors['warning_count'] > 0 || $errors['error_count'] > 0) {
        throw new Exception('无效的日期格式');
    }
    $date_format = $dateObj->format('Y-m-d');
} catch (Exception $e) {
    // 处理错误逻辑
    echo $e->getMessage();
}

方法二:替换分隔符让strtotime正确识别

把日期中的/替换成-strtotime()会自动按dd-mm-yyyy的格式解析:

$formattedDate = str_replace('/', '-', $Data['date']);
$date_format = date("Y-m-d", strtotime($formattedDate));

这个方法简单快速,适合你能确定输入格式固定为dd/mm/yyyy的场景。

方法三:手动拆分日期组件

直接拆分日、月、年,再按目标格式拼接:

// 拆分日期为日、月、年
list($day, $month, $year) = explode('/', $Data['date']);
// 拼接成Y-m-d格式
$date_format = "$year-$month-$day";

这种方法最直接,不需要依赖日期解析函数,适合格式完全固定的情况。

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

火山引擎 最新活动