LoginSignup
1
1

More than 5 years have passed since last update.

PDOで取得したデータ型がDATETIMEだったら、DateTimeオブジェクトに入れる

Posted at

PDOで普通にDATETIME型やTIMESTAMP型の取得すると、PHP的には文字列になってしまう。
PDOStatement::bindColumnとかでDateTimeオブジェクトに変換できれば美しいんだけど、できなそうだったので泥臭く実装してみました。


// SELECT実行
$sth -> execute();

// DATETIME型のカラム名配列を作成する
$datetimeColumnNameArray = array();
for ($i = 0; $i < $sth -> columncount(); ++$i ) {
    // カラムのメタ情報を取得
    $columnMeta = $sth -> getColumnMeta( $i );
    // DATETIME型の場合
    if ( strcmp( $columnMeta['native_type'], 'DATETIME' ) == 0 ) {
        $datetimeColumnNameArray[] = $columnMeta['name'];
    } else {
        ;
    }
}

// 結果を入れる配列
$valueArray = array();

// 結果を取得
while ( $value = $sth -> fetch( PDO::FETCH_ASSOC ) ) {
    // DATETIME型配列に含まれていたら、DateTimeオブジェクトにする
    foreach ( $datetimeColumnNameArray as $datetimeColumnName ) {
        $value[$datetimeColumnName] = new DateTime( $value[$datetimeColumnName] );
    }
    $valueArray[] = $value;
}

レコード数×DATETIME型のカラム数だけループが回るから、負荷的にちょっと心配。

何か他に良いやり方を知っている方がいれば、是非とも教えて下さいませm(__)m

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1