60

我有一个表格,其中包含2012年4 月 20 日星期五格式的字符串值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通过插入命令插入到表中。

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

4

8 回答 8

84

因为$newDate是类型的对象DateTime,而不是字符串。该文档是明确的:

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

如果要从字符串转换DateTime回字符串以更改格式,请DateTime::format在最后调用以从DateTime.

$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
$newDate = $newDate->format('d/m/Y'); // for example
于 2012-04-18T13:06:12.737 回答
19

试试这个:

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

注意:$row['valdate']它是数据库中的起息日

于 2015-12-02T19:11:33.870 回答
4

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

于 2015-08-12T20:28:34.063 回答
2

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

于 2020-03-13T18:56:21.813 回答
0

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

于 2012-04-18T13:08:15.920 回答
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" 
于 2015-06-17T00:38:40.337 回答
0

这有点离题,但我来自谷歌搜索同样的错误。对我来说,当我从 mssql 数据库中选择日期时间字段而不是稍后在 php-script 中使用它时,就会出现这个错误。像这样:

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

INSERT 语句给出错误:Object of class DateTime could not be converted to string

我意识到你不能只从数据库中选择日期时间:

SELECT Created FROM test_table

但是您必须为此字段使用 CONVERT :

SELECT CONVERT(varchar(24),Created) as Created FROM test_table
于 2017-12-18T08:25:49.473 回答
0
$Date = $row['Received_date']->format('d/m/Y');

然后它从数据库中给定的日期对象

于 2021-01-12T23:01:41.993 回答