如何用PHP datetime值设置Bootstrap datetimepicker默认值及处理入库转换错误
问题根因
- 日期格式识别错误:PHP的
strtotime函数默认将/分隔的日期识别为月/日/年格式,你提交的30/12/2021中30被判定为无效月份,返回布尔值false,传入date函数后就会输出Unix时间戳起点1970-01-01 00:00:00 - 日期选择器默认值赋值失败:你原有JS代码中的PHP代码没有加
echo,无法把数据库读取的日期输出到JS配置中,同时部分版本Bootstrap datetimepicker的默认值配置参数为defaultDate而非date
修复方案
1. PHP提交日期存入数据库的转换逻辑
不要直接用strtotime自动识别格式,手动指定输入格式做解析:
$input = $_POST['lot_datetime']; // 手动指定输入格式为 日/月/年 时:分 上午/下午 $dateObj = DateTime::createFromFormat('d/m/Y h:i A', $input); if ($dateObj) { // 转换为数据库兼容的datetime格式 $saveDatetime = $dateObj->format('Y-m-d H:i:s'); echo $saveDatetime; } else { // 自定义日期格式错误时的处理逻辑 $saveDatetime = date('Y-m-d H:i:s'); // 或者抛出异常提示 }
2. Bootstrap datetimepicker默认值配置
修正PHP输出逻辑,同时指定选择器的格式和提交格式保持一致:
$(function () { $('#datetimepickerDemo').datetimepicker({ // 指定选择器的显示和输出格式,和提交格式统一 format: 'DD/MM/YYYY hh:mm A', // 用defaultDate参数传默认值,PHP加echo输出日期 defaultDate: '<?php echo date('d/m/Y h:i A', strtotime($lottery['lotdatetime'])); ?>' }); });
注意事项
如果你的datetimepicker插件版本格式占位符有差异,调整format参数的占位符和PHP输出的格式一一对应即可。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

