mySQLなどで、日時を0000-00-00 00:00:00としてデータベースに格納しておくことがありますが、これを読み込んでそのままPHPのDateTimeオブジェクトに渡すと、出力が-0001-11-30 00:00:00になってしまいます。
$a = new DateTime('0000-00-00 00:00:00'); echo $a->format('Y-m-d H:i:s'); // Output: -0001-11-30 00:00:00
PHP :: Bug #42971 :: DataTime::format(): not well formated data ‘0000-00-00 00:00:00’
で、これはバグではないと言われているので、どういうことかと考えてみると、0000-00-00は存在しない0月0日を指定しているので、0月は繰り下がって-1年12月0日、さらに0日も繰り下がって-1年11月30日、となるわけですね。
データベースとPHPの文化の違い、というところでしょうか。
ちなみにDateTime型、コンストラクタにNULLを渡すと現在時刻のインスタンスが生成されるので、データベースの値をNULLにしておくと、現在時刻になってしまいます。うーん…symfonyのDoctrineでNULL判定したい場合はどうすればいいんだ…
$row->getDateTimeObject('deleted_at')
みたいなことがやりたいのですが。
sfDoctrineRecordも
$type = $this->getTable()->getTypeOf($dateFieldName); if ($type == 'date' || $type == 'timestamp') { return new DateTime($this->get($dateFieldName)); }
こうなってるからオーバーライドするしかないのかな。