如何让input type="date"显示数据库中的d-m-Y格式日期
解决input type="date"无法正确显示数据库日期的问题
问题核心:HTML的input type="date"要求value属性必须是ISO 8601格式(YYYY-MM-DD),而你数据库里的日期是d-m-Y(比如09-03-2022),直接赋值会导致浏览器无法识别,因此显示默认占位符。
你之前的代码无效原因:
- 把
date()函数调用直接写在字符串里,没有实际执行,而是被当成文本输出 - 未正确解析数据库的
d-m-Y格式日期,直接传递字符串给date()的话,参数不是合法时间戳
正确处理步骤
- 取出数据库中
d-m-Y格式的日期字符串 - 用PHP的
DateTime::createFromFormat方法,按数据库格式解析成日期对象(避免strtotime的歧义问题) - 将日期对象转换成
Y-m-d格式,赋值给input的value属性
代码示例
// 从数据库获取日期,注意数组键名需加引号 $db_date = $res['date']; // 按数据库的d-m-Y格式解析日期 $date_obj = DateTime::createFromFormat('d-m-Y', $db_date); // 转换成input要求的YYYY-MM-DD格式 $input_date = $date_obj->format('Y-m-d'); // 生成input元素 $date = "<input type=\"date\" id=\"date\" name=\"date\" value=\"{$input_date}\">";
补充说明
- 浏览器会根据用户系统的区域设置,将
YYYY-MM-DD的value显示为对应本地格式(比如dd/mm/yyyy或mm/dd/yyyy),但底层的value始终是ISO格式,表单提交时也会以此格式发送。 - 若使用
strtotime($db_date),部分场景下能解析d-m-Y格式,但存在歧义(比如03-09-2022可能被识别为3月9日或9月3日),因此用createFromFormat指定格式更可靠。
内容的提问来源于stack exchange,提问作者user2741620
相关产品推荐
相关产品推荐

