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?
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
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
Utilisez ceci: $newDate = $dateInDB->format('Y-m-d');
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
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"
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.