我的问题是,当我尝试在我的数据库中保存我收到此日期的日期时:1970-01-01
这是我的HTML代码:
<input type="text" name="dob" value="<?php echo $rows['dob']; ?>" required title="The Date of Birth is required" pattern="(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d"></input>
这是我的PHP代码获取值:
$dob = $_POST['dob'];
echo $dob.'<br>';
$dob_new = date('Y-m-d', strtotime($dob));
echo $dob_new.'<br>';
结果如下:
01-22-1984
1970-01-01
第一个日期是用户可以输入的日期和第二个日期是转换结果的一个示例!
神秘之处在于,有时这项工作有时却没有......所以这里发生了什么?有什么建议吗?我的代码中有错误吗?
答案 0 :(得分:8)
当您使用破折号作为日期分隔符时,PHP假定欧洲日期格式为DD-MM-YYYY。你的是MM-DD-YYYY。因此strtotime()
认为它的日期无效并返回false,这会导致date()
返回您所看到的Unix时代的日期。
要解决此问题,您需要以正确的格式发送日期或使用DateTime::createFromFormat()
正确解析日期。
$date = DateTime::createFromFormat('m-d-Y', $_POST['dob']);
$dob_new = $date->format('Y-m-d');