web-dev-qa-db-ja.com

クラスDateTimeのオブジェクトを文字列に変換できませんでした

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をテーブルに挿入します。

なぜこのようなエラーが発生するのですか?

40
DIM3NSION

$newDateは文字列ではなく、DateTime型のオブジェクトであるためです。 ドキュメント は明示的です:

指定されたフォーマットに従ってフォーマットされた新しいDateTimeオブジェクトを返します。

文字列からDateTimeに変換して形式に戻す場合は、最後に DateTime::format を呼び出して、DateTimeから書式設定された文字列を取得します。

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

これを試して:

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

注:$row['valdate']はデータベース内の起算日です

13
Ismael Renteria

これを使用してください:$newDate = $dateInDB->format('Y-m-d');

3
Tim

これは一種のオフトピックですが、私はここで同じエラーをグーグルでやっています。私にとっては、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
0
KennyKivi

映画のリリース日があることを確認してください。日付が欠落している場合、非オブジェクトでフォーマットすることはできません。

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" 
0
onlymybest

$newdateをデータベースに挿入しようとしています。最初に文字列に変換する必要があります。 DateTime::formatメソッドを使用して、文字列に変換します。

0
Jim D