PHP空日期字段提交时strtotime返回错误值问题
解决PHP空日期字段提交后显示01-01-1970的问题
问题根源
当用户留空DOB字段提交时,$_POST["DOB"]会是空字符串。strtotime("")会返回false,而date()函数接收false时会默认使用时间戳0,对应就是1970年1月1日。
解决方案
方案一:先判断字段是否为空再处理
在转换日期格式前,先检查字段是否非空,空字段时直接输出空值或自定义提示:
<form method="post"> <input type="date" name="DOB"/> <input type="submit" value="Submit" name="BtnSubmit"/> </form> <?php if(isset($_POST["BtnSubmit"])) { $F_DOB = $_POST["DOB"]; if (!empty($F_DOB)) { $F_DOBNew = date("d-m-Y", strtotime($F_DOB)); echo $F_DOBNew; } else { // 空字段时的处理,可输出空或提示文本 echo ""; // 或者 echo "请选择出生日期"; } } ?>
方案二:用三元运算符简化逻辑
如果逻辑简单,可通过三元运算符一行完成判断与转换:
<form method="post"> <input type="date" name="DOB"/> <input type="submit" value="Submit" name="BtnSubmit"/> </form> <?php if(isset($_POST["BtnSubmit"])) { $F_DOB = $_POST["DOB"]; $F_DOBNew = !empty($F_DOB) ? date("d-m-Y", strtotime($F_DOB)) : ""; echo $F_DOBNew; } ?>
方案三:使用DateTime类更严谨处理(推荐)
DateTime类对日期解析的容错性更强,且能明确指定输入格式(HTML的date类型提交的是Y-m-d格式),避免strtotime的潜在解析问题:
<form method="post"> <input type="date" name="DOB"/> <input type="submit" value="Submit" name="BtnSubmit"/> </form> <?php if(isset($_POST["BtnSubmit"])) { $F_DOB = $_POST["DOB"]; if (!empty($F_DOB)) { $date = DateTime::createFromFormat("Y-m-d", $F_DOB); $F_DOBNew = $date->format("d-m-Y"); echo $F_DOBNew; } else { echo ""; } } ?>
内容的提问来源于stack exchange,提问作者user24025099
相关产品推荐
相关产品推荐

