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

up9lanfz  于 5个月前  发布在  PHP
关注(0)|答案(9)|浏览(65)

我有一个表,在名为Film_Release的字段中包含格式为Friday 20th April的字符串值
我正在循环,我想将它们转换为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插入到表中。
为什么我会得到这样一个错误?

4ioopgfo

4ioopgfo1#

因为$newDateDateTime类型的对象,而不是字符串。documentation是显式的:
返回根据指定格式格式化的新DateTime对象。
如果你想从一个字符串转换到DateTime再转换回字符串来改变格式,在最后调用DateTime::format来从你的DateTime中得到一个格式化的字符串。

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

字符串

qcbq4gxm

qcbq4gxm2#

试试这个:

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

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

trnvg8h3

trnvg8h33#

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

brc7rcf0

brc7rcf04#

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

jyztefdp

jyztefdp5#

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

字符串
然后它从数据库中给定的日期对象转换

sdnqo3pr

sdnqo3pr6#

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

gg0vcinb

gg0vcinb7#

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

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"

yxyvkwin

yxyvkwin8#

这是一种题外话,但我来这里从谷歌相同的错误.对我来说,这个错误出现时,我选择从mssql数据库的datetime字段,而不是使用它以后在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));
}

字符串
错误代码:Object of class DateTime could not be converted to string
我意识到你不能只是从数据库中选择日期时间:

SELECT Created FROM test_table

但是你必须使用转换为这个字段:

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

vcirk6k6

vcirk6k69#

对于那些像我一样来自JavaScript的人:你不能简单地回显DateTime对象,并期望输出一个格式良好的默认字符串!
你必须使用**format()**函数并输入一个自定义格式,如$dateTimeObject->format('Y-m-d'),以获得存储在对象中的日期的字符串表示。
不过,你可以使用一些默认常量,这个常量最接近JavaScript的默认格式:

echo (new DateTime())->format( DateTime::RSS );
// Fri, 29 Dec 2023 00:48:56 +0000

字符串
或者,使用print_r( $dateTimeObject )快速浏览datetime值:)

print_r( (new DateTime()) );
/*(
  [date] => 2023-12-29 00:55:38.670878
  [timezone_type] => 3
  [timezone] => UTC
)*/

相关问题