在PHP中将数据库日期格式转换为yyyy-mm-dd并返回到dd-mm-yyyy

时间:2013-03-06 13:29:31

标签: php mysql

基本上我有一个用户选择的日期,格式如下:

01-12-2013 (dd-mm-yyyy)

我需要将它格式化为数据库的yyyy-mm-dd格式,因为它的日期类型如下:

2013-12-01

我将日期存储在变量中,我们称之为$date

我尝试过使用createFromFormat函数,如下所示:

$processdate = DateTime::createFromFormat('dd-mm-yy', $date);
echo $processdate->format('yy-mm-dd');

但我得到一个错误说:

Fatal error: Call to a member function format() on a non-object

有人可以告诉我,我没有正确使用它吗?

4 个答案:

答案 0 :(得分:2)

记录

createFromFormat在失败时返回false,这正是这里发生的事情。当您尝试在format上拨打false时,该程序会爆炸,这没有任何意义。

原因是您的格式字符串错误。对于给定的输入,正确的格式字符串为"d-m-Y"(格式字符串也记录在同一页面上)。

当然这意味着您的输出格式字符串也是错误的:它应该是"Y-m-d"

答案 1 :(得分:1)

MySQL可以使用STR_TO_DATE函数为您执行此操作:

SELECT STR_TO_DATE('01-05-2013','%d-%m-%Y');

答案 2 :(得分:0)

这是我用于转换SQL日期

的方法
function human_date_to_sql($date) {
  if($date == '') return '';

  if(stristr($date, "-")) return $date;

  $date_parts = explode('/', $date);
  $sql_date = $date_parts[2] . "-" . $date_parts[1] . "-" . $date_parts[0];

  return $sql_date;
}

function sql_date_to_human($date) {
  if($date == '') return '';

  if(stristr($date, "/")) return $date;

  $date_parts = explode('-', $date);
  $human_date = $date_parts[2] . "/" . $date_parts[1] . "/" . $date_parts[0];

  return $human_date;
}

答案 3 :(得分:0)

试试这个:

    function dateInsert($Date, $In = '-', $Out = '-')
        {
            if ($Date)
                return implode($Out, array_reverse(explode($In, $Date)));
            else {
                return false;
            }
        }
$date = '01-12-2013';
echo dateInsert($date);

您可以使用此功能更改日期。 希望这会有所帮助。