我的问题是,当我尝试在我的数据库中保存一个日期时,我收到了这个日期: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
第一个日期是用户可以输入的日期,第二个日期是转换的结果!
神秘的是有时这个工作,但有时不...那么这里发生了什么?有什么建议吗?我的代码有什么错误吗?
最佳答案
当您使用破折号作为日期分隔符时,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');
关于PHP 将日期转换为 mm-dd-YYYY 到 YYYY-mm-dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706647/