PHP 将日期转换为 mm-dd-YYYY 到 YYYY-mm-dd

标签 php html date timestamp

我的问题是,当我尝试在我的数据库中保存一个日期时,我收到了这个日期: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');

Demo

关于PHP 将日期转换为 mm-dd-YYYY 到 YYYY-mm-dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706647/

相关文章:

mysql - 谁能帮我处理日期命令

php - 使用Mysql数据库用户名和密码登录

php - Bootstrap 表单对齐

javascript - 将一个 div 堆叠在隐藏在滚动条上的 Bootstrap 导航栏之上

html - Nokogiri 和 Xpath : find all text between two tags

javascript - 在 JavaScript 中将 Unix 时间转换为 "minutes ago"

java - 有没有提供每月第一天的函数?

php - 使用 Flickr API 获取 Flickr 相册中所有照片的 URL

php - Xampp mysql 错误 : MySQL shutdown unexpectedly

php - echo ('exit' ); 之间有什么区别?死;并死于 ('exit');?