0

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

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

4 回答 4

2

createFromFormat记录在失败时返回false,这正是这里发生的情况。当您尝试调用时程序会爆炸formatfalse这没有任何意义。

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

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

于 2013-03-06T13:33:16.667 回答
1

MySQL 可以通过以下功能为您做到这一点STR_TO_DATE

SELECT STR_TO_DATE('01-05-2013','%d-%m-%Y');
于 2013-03-06T13:32:54.777 回答
0

这就是我用来转换 SQL 日期和从 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;
}
于 2013-03-06T13:32:07.627 回答
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);

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

于 2013-03-06T13:33:06.157 回答