Film_Releaseというフィールドに2012年4月20日金曜日の形式の文字列値を持つテーブルがあります
私はループしているので、日時に変換して別のテーブルに展開したいと思います。 2番目のテーブルには、DATEs形式のFilms_Dateという列があります。このエラーを受け取っています
DateTimeクラスのオブジェクトを文字列に変換できませんでした
$dateFromDB = $info['Film_Release'];
$newDate = DateTime::createFromFormat("l dS F Y",$dateFromDB); //( http:php.net/manual/en/datetime.createfromformat.php)
次に、挿入コマンドを使用して$ newdateをテーブルに挿入します。
なぜこのようなエラーが発生するのですか?
$newDate
は文字列ではなく、DateTime
型のオブジェクトであるためです。 ドキュメント は明示的です:
指定されたフォーマットに従ってフォーマットされた新しい
DateTime
オブジェクトを返します。
文字列からDateTime
に変換して形式に戻す場合は、最後に DateTime::format
を呼び出して、DateTime
から書式設定された文字列を取得します。
$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB);
$newDate = $newDate->format('d/m/Y'); // for example
これを試して:
$Date = $row['valdate']->format('d/m/Y'); // the result will 01/12/2015
注:$row['valdate']
はデータベース内の起算日です
これを使用してください:$newDate = $dateInDB->format('Y-m-d');
これは一種のオフトピックですが、私はここで同じエラーをグーグルでやっています。私にとっては、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));
}
iNSERTステートメントでエラーが発生していました:Object of class DateTime could not be converted to string
CA N'Tデータベースから日時を選択するだけであることに気付きました:
SELECT Created FROM test_table
BUTこのフィールドにはCONVERTを使用する必要があります。
SELECT CONVERT(varchar(24),Created) as Created FROM test_table
映画のリリース日があることを確認してください。日付が欠落している場合、非オブジェクトでフォーマットすることはできません。
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"
$newdate
をデータベースに挿入しようとしています。最初に文字列に変換する必要があります。 DateTime::format
メソッドを使用して、文字列に変換します。