如何在PHP新建表单中让datepicker显示今日日期或为空
解决方案:修复Datepicker默认显示1970-01-01问题
问题根源
新建表单时,$start_date/$end_date可能被初始化为空字符串(而非不存在),导致isset()返回true并输出空值,jQuery UI Datepicker会将空值解析为Unix时间戳0对应的1970-01-01。另外,之前设置的defaultDate仅影响日期选择器打开时的默认选中项,不会修改输入框的初始显示值。
方案1:默认显示今日日期
修改PHP的value判断逻辑,用!empty()替代isset(),确保空字符串、0等无效值时自动填充今日日期,同时保留验证失败时的用户输入回显:
<?php $today = date('m/d/Y'); ?> <div class="row"> <div class="medium-12 columns"> <label for="start_date"><strong>Start Date:</strong> <input type="text" class="datepicker" name="start_date" id="start_date" value="<?= !empty($start_date) ? $start_date : $today; ?>" /> </label> </div> </div> <div class="row"> <div class="medium-12 columns"> <label for="end_date"><strong>End Date:</strong> <input type="text" class="datepicker" name="end_date" id="end_date" value="<?= !empty($end_date) ? $end_date : $today; ?>" /> </label> </div> </div> <script> $( function() { $( ".datepicker" ).datepicker({ dateFormat: 'mm/dd/yyyy' // 与PHP输出格式保持一致,避免解析错误 }); }); </script>
方案2:默认保持为空(仅验证失败时回显输入)
修改PHP逻辑默认输出空字符串,同时配置Datepicker避免解析空值为1970日期:
<?php // 无需定义$today,除非其他业务场景需要 ?> <div class="row"> <div class="medium-12 columns"> <label for="start_date"><strong>Start Date:</strong> <input type="text" class="datepicker" name="start_date" id="start_date" value="<?= isset($start_date) && !empty($start_date) ? $start_date : ''; ?>" /> </label> </div> </div> <div class="row"> <div class="medium-12 columns"> <label for="end_date"><strong>End Date:</strong> <input type="text" class="datepicker" name="end_date" id="end_date" value="<?= isset($end_date) && !empty($end_date) ? $end_date : ''; ?>" /> </label> </div> </div> <script> $( function() { $( ".datepicker" ).datepicker({ dateFormat: 'mm/dd/yyyy', defaultDate: null // 明确设置打开选择器时默认显示当前月份 }); }); </script>
补充说明
- 确保新建表单时,
$start_date和$end_date要么未定义,要么被设为null;如果从请求/数据库获取值,需提前过滤空字符串等无效值。 - jQuery UI Datepicker的
dateFormat必须与PHP输出的日期格式完全匹配,否则会出现日期解析异常。
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

