DateTimeImmutableにハマる
PHP-5.5から使えるようになった DateTimeImmutable クラス。
DateTimeとの違いは値が不変であること。
DateTimeInterface というinterfaceも追加されていて、
これを使えば従来のDateTimeとも透過的に扱える。
とても素敵なクラスだと思う。
コード内の日付はintのunixtimeでもなく、文字列の Y-m-d H:i:s でもなく、
これで統一しよう、わーいと思って開発をしていたのだけども、
残念なことにどうにもbuggyなのである。
- PHP :: Bug #64851 :: DateTimeImmutable::createFromFormat() returns DateTime
PHP :: Bug #65502 :: DateTimeImmutable::createFromFormat returns DateTime DateTimeImmutable::createFromFormat() で、DateTimeImmutable でなく DateTime が返される。
php-5.5.5で修正。PHP :: Bug #65548 :: Comparison for DateTimeImmutable doesn't work 算術演算子での日付の比較ができない。(DateTimeはできる)
php-5.5.5で修正。PHP :: Bug #65768 :: DateTimeImmutable::diff does not work DateTimeImmutable::diff() に DateTimeImmutableを渡せない。
php-5.5.8で修正。PHP :: Bug #67634 :: getTimestamp() modify instance of DateTimeImmutable DateTimeImmutable::getTimestamp() が DateTimeImmutableの値を書き換える。
php-5.5.16でも修正なし。
開発、STG、本番でマイナーバージョンが違っているプロジェクトでハマった。
DateTimeで我慢しておくのが懸命かもしれない。
immutableじゃないことに注意しながら。