在PHP中将数据库日期格式转换为yyyy-mm-dd和dd-mm-yyyy


Converting Database date format to yyyy-mm-dd and back to dd-mm-yyyy in PHP

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

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

我需要将其格式化为DB的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

谁能告诉我我怎么没有正确地使用它?

createFromFormat被记录为在失败时返回false,这正是这里发生的事情。当你试图在false上调用format时,程序会崩溃,这没有任何意义。

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

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

MySQL可以为您做STR_TO_DATE函数:

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

这是我用来转换和从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;
}

try this:

    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);

您可以使用此函数更改日期。