基本上我有一个用户选择的日期,格式如下:
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
有人可以告诉我,我没有正确使用它吗?
答案 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);
您可以使用此功能更改日期。 希望这会有所帮助。