web-dev-qa-db-fra.com

L'objet de la classe DateTime n'a pas pu être converti en chaîne

J'ai un tableau avec des valeurs de chaîne au format de vendredi 20 avril 2012 dans un champ appelé Film_Release

Je boucle et je veux les convertir en date/heure et les déployer dans une autre table. Ma deuxième table a une colonne appelée Films_Date, au format DATE. Je reçois cette erreur

L'objet de la classe DateTime n'a pas pu être converti en chaîne

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

Ensuite, j'insère $ newdate dans la table à l'aide d'une commande insert.

Pourquoi est-ce que je reçois une telle erreur?

35
DIM3NSION

Parce que $newDate est un objet de type DateTime, pas une chaîne. La documentation est explicite:

Renvoie le nouvel objet DateTime formaté en fonction du .__ spécifié. format.

Si vous voulez convertir une chaîne en DateTime en chaîne pour changer le format, appelez DateTime::format à la fin pour obtenir une chaîne formatée de votre DateTime.

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

Essaye ça:

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

NOTE: $row['valdate'] sa date de valeur dans la base de données

13
Ismael Renteria

Utilisez ceci: $newDate = $dateInDB->format('Y-m-d');

3
Tim

C'est un peu bizarre, mais je viens ici de googler la même erreur. Pour moi, cette erreur est apparue lorsque je sélectionnais le champ datetime dans la base de données mssql et que je l’utilisais plus tard dans php-script . Comme ceci: 

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

l'instruction INSERT donnait une erreur: Object of class DateTime could not be converted to string

Je me suis rendu compte que vous ne pouvez pas sélectionnez simplement la date/heure dans la base de données:

SELECT Created FROM test_table

MAISvous devez utiliser CONVERT pour ce champ:

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

Assurez-vous qu'il y a une date de sortie du film; si la date manque, vous ne pourrez pas formater sur un non-objet.

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

ou 

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

Vous essayez d'insérer $newdate dans votre base de données. Vous devez d'abord le convertir en chaîne. Utilisez la méthode DateTime::format pour reconvertir en chaîne.

0
Jim D