【问题标题】:PHP convert date to mm-dd-YYYY to YYYY-mm-ddPHP 将日期转换为 mm-dd-YYYY 到 YYYY-mm-dd
【发布时间】:2023-03-26 12:13:01
【问题描述】:

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

第一个日期是用户可以输入的日期的一个例子,第二个日期是转换的结果!

神秘的是,有时这项工作,但有时没有......那么这里发生了什么?有什么建议吗?我的代码有错误吗?

【问题讨论】:

  • 我们能看到所有的代码吗?这将有助于隔离问题。
  • 看来你做事很辛苦。而不是&lt;input type="text"&gt;,您应该使用&lt;input type="date"&gt;,以便每次都正确格式化日期。另一个不错的选择是使用 3 个下拉菜单,这些下拉菜单预先填充了可能的日期、月份和年份。这样您就可以控制格式。
  • EternalHour 感谢您的建议,但我需要将此字段设为文本,因为我正在使用数据库查询填充此字段,而当我尝试填写日期字段时,什么也没有发生!这就是我使用 type=text 的原因。
  • 日期类型支持value属性,如果格式正确,从数据库中填充应该没有问题。

标签: php html date timestamp


【解决方案1】:

当您使用破折号作为日期分隔符时,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

【讨论】:

  • John 当我尝试你的代码时,我遇到了这个错误:Catchable fatal error: Object of class DateTime could not be convert to string in C:\xampp\htdocs\....
  • 显示您在该示例中使用的日期
  • 我正在添加例如这个简单的日期:01-22-1984
  • 点击演示按钮。这表明它在那个日期工作。我认为您的代码中有语法错误。
  • 我的朋友在你的演示中没有任何东西可以正常工作,但在我的项目中我输入了相同的行,我收到了这个错误!请问有什么建议吗?可捕获的致命错误:无法将类 DateTime 的对象转换为字符串.......错误是当我尝试将该日期保存在数据库中时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多