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




