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

64

我有一个表,其中包含格式为Friday 20th April 2012 的字符串值,在名为Film_Release的字段中。

我正在循环遍历,并且想要将它们转换成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)

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

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

8个回答

92
因为$newDate是一个DateTime类型的对象,而不是字符串。根据文档,这是明确指出的:

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

如果想要将字符串转换为DateTime对象、再将其转换为另一种格式的字符串,则需要在最后调用DateTime::format方法来获取格式化后的字符串。
$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
$newDate = $newDate->format('d/m/Y'); // for example

1
嗨,我尝试了一下,但是出现了这个错误 - 在非对象上调用成员函数format()。 - DIM3NSION
@DIM3NSION:除非 createFromFormat 不返回对象,否则无法使用上述代码实现,这意味着它返回了 false,因为输入无效。请阅读文档并修复输入。 - Jon
我应该使用什么类型的字段来插入 $new date?我现在已经让它工作了。 - DIM3NSION

20

试试这个:

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

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


5
使用以下代码:$newDate = $dateInDB->format('Y-m-d');

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

这对我很有效,但我只使用这个。.format('d/m/Y') myObject .format('d/m/Y') - AllisLove

1
$Date = $row['Received_date']->format('d/m/Y');

然后它从数据库中给定的日期对象进行转换。

0

这有点离题,但我是通过谷歌搜索同样的错误而来到这里的。 对我来说,当我从mssql数据库中选择datetime字段,然后在php脚本中稍后使用它时,就会出现这个错误。 像这样:

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

插入语句出现错误:无法将DateTime类的对象转换为字符串

我意识到你不能仅从数据库中选择日期时间:CAN'T

SELECT Created FROM test_table

但是你必须使用CONVERT函数来处理这个字段:

SELECT CONVERT(varchar(24),Created) as Created FROM test_table

使用参数Kenny,它们是为此而存在的,然后将从\DateTime对象转换为“sqlsrv_query($con,“INSERT INTO tablename(dtfield) VALUES(?)”,array($datetime))”。 - GDmac

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" 

0

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


嗨,我尝试使用format函数但是收到了一个错误 - 在非对象上调用成员函数format()。 - DIM3NSION

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接