it-swarm.com.de

Objekt der Klasse DateTime konnte nicht in eine Zeichenfolge konvertiert werden

Ich habe eine Tabelle mit String-Werten im Format Freitag, 20. April 2012 in einem Feld namens Film_Release

Ich mache eine Schleife und möchte sie in datetime konvertieren und sie in eine andere Tabelle rollen. Meine zweite Tabelle hat eine Spalte mit dem Namen Films_Date, deren Format DATE ist. Ich erhalte diesen Fehler

Objekt der Klasse DateTime konnte nicht in eine Zeichenfolge konvertiert werden

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

Dann füge ich $ newdate durch einen Befehl zum Einfügen in die Tabelle ein.

Warum erhalte ich einen solchen Fehler?

35
DIM3NSION

Weil $newDate ein Objekt vom Typ DateTime und keine Zeichenfolge ist. Die Dokumentation ist explizit:

Gibt ein neues DateTime-Objekt zurück, das gemäß dem angegebenen .__-Format formatiert ist. Format.

Wenn Sie von einem String in DateTime zurück in einen String konvertieren möchten, um das Format zu ändern, rufen Sie am Ende DateTime::format auf, um einen formatierten String aus Ihrer DateTime zu erhalten.

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

Versuche dies:

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

HINWEIS: $row['valdate'] ist ein Wertdatum in der Datenbank

13
Ismael Renteria

Verwenden Sie dies: $newDate = $dateInDB->format('Y-m-d');

3
Tim

Es ist irgendwie offtopic, aber ich komme hier her, weil ich den gleichen Fehler gegoogelt habe. Dieser Fehler trat für mich auf, als ich das datetime-Feld aus der mssql-Datenbank auswählte und später in 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));
}

die INSERT-Anweisung gab einen Fehler aus: Object of class DateTime could not be converted to string

Ich habe festgestellt, dass Sie CAN'T die datetime aus der Datenbank auswählen:

SELECT Created FROM test_table

ABERSie müssen für dieses Feld CONVERT verwenden:

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

Vergewissern Sie sich, dass ein Datum für die Veröffentlichung des Films vorliegt. Wenn das Datum fehlt, können Sie kein Nicht-Objekt formatieren.

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"; 
}

oder 

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

Sie versuchen, $newdate in Ihre Datenbank einzufügen. Sie müssen es zuerst in einen String konvertieren. Verwenden Sie die DateTime::format-Methode, um wieder in eine Zeichenfolge zu konvertieren.

0
Jim D