类DateTime的对象无法转换为字符串

时间:2012-04-18 13:02:37

标签: php mysql datetime insert

我在一个名为Film_Release

的字段中有一个字符串值格式为 2012年4月20日星期五的表格

我正在循环,我想在datetime中转换它们并将它们滚动到另一个表中。我的第二个表有一个名为Films_Date的列,格式为DATE。我收到此错误

类DateTime的对象无法转换为字符串

$dateFromDB = $info['Film_Release'];
 $newDate = DateTime::createFromFormat("l dS F Y",$dateFromDB); //( http:php.net/manual/en/datetime.createfromformat.php)

然后我通过insert命令将$ newdate插入表中。

为什么我会收到这样的错误?

7 个答案:

答案 0 :(得分:63)

因为$newDateDateTime类型的对象,而不是字符串。 documentation是明确的:

  

返回根据指定格式化的新DateTime对象   格式。

如果您想要将字符串转换为DateTime返回字符串以更改格式,请在结尾处调用DateTime::format以从DateTime中获取格式化字符串。

$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
$newDate = $newDate->format('d/m/Y'); // for example

答案 1 :(得分:13)

试试这个:

$Date = $row['valdate']->format('d/m/Y'); // the result will 01/12/2015

注意:$row['valdate']是数据库中的值日期

答案 2 :(得分:3)

使用此:$newDate = $dateInDB->format('Y-m-d');

答案 3 :(得分:0)

您正在尝试将$newdate插入数据库。您需要先将其转换为字符串。使用DateTime::format方法转换回字符串。

答案 4 :(得分:0)

检查以确保有电影上映日期;如果缺少日期,您将无法在非对象上进行格式化。

if ($info['Film_Release']){ //check if the date exists
   $dateFromDB = $info['Film_Release'];
   $newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
   $newDate = $newDate->format('d/m/Y'); 
} else {
   $newDate = "none"; 
}

 $newDate = ($info['Film_Release']) ? DateTime::createFromFormat("l dS F Y", $info['Film_Release'])->format('d/m/Y'): "none" 

答案 5 :(得分:0)

It's kind of offtopic, but i come here from googling the same error. For me this error appeared when i was selecting datetime field from mssql database and than using it later in php-script. like this:

@first =1+2+4=7 
@second= 1+0+0=1
@third=0+1+0=1
@forth=0+4+0=4

the INSERT statement was giving error: $SQL="SELECT Created FROM test_table"; $stmt = sqlsrv_query($con, $SQL); if( $stmt === false ) { die( print_r( sqlsrv_errors(), true)); } $Row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC); $SQL="INSERT INTO another_test_table (datetime_field) VALUES ('".$Row['Created']."')"; $stmt = sqlsrv_query($con, $SQL); if( $stmt === false ) { die( print_r( sqlsrv_errors(), true)); }

I realized that you CAN'T just select the datetime from database:

Object of class DateTime could not be converted to string

BUT you have to use CONVERT for this field:

SELECT Created FROM test_table

答案 6 :(得分:0)

如果您正在为Symfony使用Twig模板,则可以使用经典的{{object.date_attribute.format('d/m/Y')}}获得所需的格式化日期。