PHP中如何基于dd/mm/yy hh:mm格式的日期时间生成MySQL DateTime格式?
PHP中如何基于dd/mm/yy hh:mm格式的日期时间生成MySQL DateTime格式?
这问题我之前也碰到过,确实很容易踩坑——PHP默认的日期解析逻辑会把带/的日期当成月/日/年,所以咱们得明确告诉它原始格式才行,给你两种靠谱的解决办法:
方法一:用DateTime::createFromFormat(推荐)
这是最稳妥的方式,因为它能精准指定原始日期的格式,完全不会有歧义,而且PHP 5.2及以上版本都支持。
具体代码示例:
// 你的原始日期时间字符串 $originalDate = '15/05/24 14:00'; // 按照原始格式解析字符串,生成DateTime对象 $dateTime = DateTime::createFromFormat('d/m/y H:i', $originalDate); // 格式化为MySQL要求的DateTime格式(YYYY-MM-DD HH:MM:SS) $mysqlDate = $dateTime->format('Y-m-d H:i:s'); echo $mysqlDate; // 输出:2024-05-15 14:00:00
参数说明:
d/m/y H:i:对应你的原始格式,d代表两位日期,m代表两位月份,y代表两位年份(会自动补全为四位,比如24会变成2024),H是24小时制的小时,i是分钟。Y-m-d H:i:s:MySQL DateTime要求的标准格式,Y是四位年份,m两位月份,d两位日期,后面跟小时、分钟、秒。
另外,为了避免原始格式错误导致程序报错,建议加个判断:
$originalDate = '15/05/24 14:00'; $dateTime = DateTime::createFromFormat('d/m/y H:i', $originalDate); if ($dateTime) { $mysqlDate = $dateTime->format('Y-m-d H:i:s'); echo $mysqlDate; } else { // 处理格式错误的场景,比如提示用户输入正确格式 echo '输入的日期时间格式不正确,请检查!'; }
方法二:用strtotime配合字符串替换(不推荐,但应急可用)
strtotime默认会把带/的日期解析成月/日/年,但如果把/替换成-,它就会按日-月-年来解析。不过这种方法依赖PHP的默认解析规则,遇到特殊格式可能出问题,所以只建议应急用。
代码示例:
$originalDate = '15/05/24 14:00'; // 把日期分隔符从/换成- $formattedStr = str_replace('/', '-', $originalDate); // 转成MySQL格式 $mysqlDate = date('Y-m-d H:i:s', strtotime($formattedStr)); echo $mysqlDate; // 输出:2024-05-15 14:00:00
总的来说,优先用第一种方法,精准控制解析规则,不容易出问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

