在 PHP 中的日期格式之间进行转换


Converting between date formats in PHP

我有一个Web,它要求用户输入一个日期,然后将其存储在MySQL数据库中。我想让用户在 m/d/yyyy 中输入日期,并让系统将其转换为 MySQL 所需的 Y-m-d 格式。我认为这很简单,但我无法让它停止犯严重错误,

我尝试了以下方法:

$date = new DateTime($this->vital_date);
$this->vital_date = $date->format('Y-m-d');

当用户输入 9/6/2013 时,2013-06-09 将存储在 MySQL 表中。(请注意月份和日期的换位。

然后,我尝试了较旧的预对象方式:

$date = strtotime($this->vital_date);
$this->vital_date = date('Y-m-d', $date);

这做了同样的事情 - 一个颠倒的月份和日期。

任何人都可以就我做错了什么或如何进行更好的转换给我任何帮助。

你应该

使用DateTime::createFromFormat

来自 PHP 文档

m/d/y 或 d-m-y 格式

中的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是短划线 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。

$vital_date = "9/6/2013";
$date = DateTime::createFromFormat("m/d/Y", $vital_date);
echo $date->format('Y-m-d');

你应该使用 DateTime::createFromFormat 作为非标准格式

您可以通过以下方式指定为数据提供的格式:

$date = DateTime::createFromFormat('j/n/Y', '9/6/2013');
此示例不仅

在这种情况下很明显,而且在许多其他地方也很有用,例如从数学家那里获取信息 输入的二次方程 在您的网站文本框中输入没有正则表达式

或驾驶执照号码可以正确处理并存储在数据库中,使用scanf进行格式化,例如scanf($input, '%s-%s-%d/%d); 等

这取决于你的需要,所以你必须了解sscanfscanfprintfsprintfvsprintf

<?php 
$date = '9/6/2013';
    list($month,$day,$year) = sscanf($date, '%d/%d/%d');
    $date = sprintf('%d-%02d-%02d',$year,$month,$day);
echo $date;
?>