Ik heb een tabel met tekenreekswaarden in de indeling vrijdag 20 april 2012in een veld met de naam Film_Release
Ik ben aan het doorlopen en ik wil ze omzetten in DateTime
en ze uitrollen naar een andere tabel. Mijn tweede tabel heeft een kolom met de naam Films_Date
, met de indeling DATE
. Ik ontvang deze foutmelding
Object van klasse DateTime kan niet worden geconverteerd naar tekenreeks
$dateFromDB = $info['Film_Release'];
$newDate = DateTime::createFromFormat("l dS F Y",$dateFromDB); //( http:php.net/manual/en/datetime.createfromformat.php)
Vervolgens voeg ik $newdate
in de tabel in via een insert-commando.
Waarom krijg ik zo’n foutmelding?
Antwoord 1, autoriteit 100%
Omdat $newdate
een object van het type DateTime
is, geen string. De documentatieis expliciet:
Retourneert een nieuw
DateTime
-object geformatteerd volgens de opgegeven
formaat.
Als je een string naar DateTime
terug wilt converteren naar een string om het formaat te wijzigen, bel dan DateTime::format
aan het einde om een opgemaakte string uit uw DateTime
te halen.
$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
$newDate = $newDate->format('d/m/Y'); // for example
Antwoord 2, autoriteit 24%
Probeer dit:
$Date = $row['valdate']->format('d/m/Y'); // the result will 01/12/2015
OPMERKING: $row['valdate']
het is een valutadatum in de database
Antwoord 3, autoriteit 5%
Gebruik dit: $newDate = $dateInDB->format('Y-m-d');
Antwoord 4
Als u Twig-sjablonen voor Symfony gebruikt, kunt u de klassieke {{object.date_attribute.format('d/m/Y')}}
gebruiken om de gewenste opgemaakte datum te verkrijgen.
Antwoord 5
Je probeert $newdate
in te voegen in je database. Je moet het eerst naar een string converteren. Gebruik de DateTime::format
methode om terug te converteren naar een string.
Antwoord 6
Controleer of er een releasedatum voor de film is; als de datum ontbreekt, kunt u niet formatteren op een niet-object.
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";
}
of
$newDate = ($info['Film_Release']) ? DateTime::createFromFormat("l dS F Y", $info['Film_Release'])->format('d/m/Y'): "none"
Antwoord 7
Het is een beetje offtopic, maar ik kom hier na het googlen van dezelfde fout.
Voor mij verscheen deze fout toen ik het datetime-veld uit de mssql-database selecteerde en het later in php-script gebruikte.
zoals dit:
$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));
}
de INSERT-instructie gaf een fout: Object of class DateTime could not be converted to string
Ik realiseerde me dat je KAN NIETgewoon de datetime uit de database selecteren:
SELECT Created FROM test_table
MAARje moet CONVERT gebruiken voor dit veld:
SELECT CONVERT(varchar(24),Created) as Created FROM test_table
Antwoord 8
$Date = $row['Received_date']->format('d/m/Y');
vervolgens cast het datumobject van gegeven in de database