Home > PHP > 日付時間はDateTimeクラスで

日付時間はDateTimeクラスで

  • 2006-11-10 (金) 0:25
  • PHP
この記事の所要時間: 357

5.2.0の新機能にDateTimeクラスがあります。既存のdate関係の関数をクラスにまとめたもののようです。

以前から思っていたのですが、日付時間データを文字列や数値で持っているのに違和感がありました。特にDBからデータを取得した際、DBで日付時間型(PostgreSQLならtimestamp型)のものはPHPでもそのまま扱えないかな、と思っていました。

そこで自分が構築しているアプリケーションではDBのレコードをModelに格納する際に自作のDateクラスに変換しています。こうしておけばそのModelを使う場合は日付時間をDateクラスのメソッドで操作できます。イメージとしては以下のような感じです。

< ?php
class MyModel {
  /** 登録時間 */
  var $regiterTime = null;
}

// DB からモデル生成
// ....

// 年だけを取得
$model->registerTime->getYear();
// YYYY/MM/DD文字列で取得
$model->registerTime->getFormatString('Y/m/d');
?>

日付時間は色々なフォーマットに変換して表現する(YYYY/MM/DDにしたりYYYYだけ取ったり)のでクラス化した方が後は扱いやすいと思うのですが、あまりこういった話は聞かないですね。DBの日付時間型関数が充実しているだけにPHPでも、と考えてしまいます。

そこで冒頭のDateTimeクラスです。

いずれはPDOを使ったDBアクセスではDBの日付時間型をこのクラスに変換してくれるようになって、日付時間はDateTimeクラスで扱うというのが標準になってくれれば良いなあ、と淡い期待を抱いています。

常にDateTimeクラスにされると困る人もいるでしょうから、イメージとしてはこんな感じでしょうか。

< ?php
  // createdの内容をDateTimeオブジェクトにする
  $stmt->bindColumn('created', $created, PDO::PARAM_DATE);
?>

ひそかに注目のクラスです。

 

2006/11/10追記:PDOとの連携を考えてみました。

かなりadhocな方法ですが、いちおうDBの日付時間型をDateTimeクラスで表現できます。

< ?php
class MyModel {
  private function __set($name, $value) {
    if ($name == 'created') {
      $this->{$name} = new DateTime($value);
    } else {
      $this->{$name} = $value;
    }
  }
}

dl('php_pdo_pgsql.dll');
try {
  $dbh = new PDO('pgsql:host=localhost;dbname=xxx', 'xxx', 'pass');
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $dbh->prepare('SELECT id,created from users where id=?');

  $stmt->execute(array('1'));

  while ($ret = $stmt->fetchObject('MyModel')) {
    printf("id:%d %04d年%02d月%02d日", $ret->id
                                    , $ret->created->format('Y')
                                    , $ret->created->format('m')
                                    , $ret->created->format('d'));
  }

  $dbh = null;
} catch (PDOException $e) {
   print "error!: " . $e->getMessage() . "<br />";
   die();
}
?>
Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
/blog/2006/11/php_datetime.html/trackback
Listed below are links to weblogs that reference
日付時間はDateTimeクラスで from Shin x blog

Home > PHP > 日付時間はDateTimeクラスで

検索
フィード
メタ情報

Return to page top