https://bugs.php.net/bug.php?id=65502
え?
http://www.php.net/ChangeLog-5.php#5.5.5
PHP5.5.5で修正されたそうです。
https://bugs.php.net/bug.php?id=65548
え?
http://www.php.net/manual/ja/datetime.diff.php
> PHP 5.2.2 以降では、DateTime オブジェクトを 比較演算子 で比較できるようになりました。
http://www.php.net/ChangeLog-5.php#5.5.5
PHP5.5.5で修正されたそうです。
http://bugs.php.net/65768
え?
http://jp2.php.net/manual/ja/datetime.diff.php
> public DateInterval DateTimeImmutable::diff ( DateTimeInterface $datetime2 [, bool $absolute = false ] )
http://www.php.net/ChangeLog-5.php#5.5.8
PHP5.5.8で修正されたそうです。
DateTimeImmutableクラスはPHP5.5で追加されたクラスで、最初に設定した日時を変更することができないDateTimeです。
変えられない日付(イベントの日時など)を設定しておいて、それからの差分を求めたりなんかしたい場合に便利です。
が、しかしこうもバグがあると使うのが躊躇われますね。
PHP5.5からDateTimeInterfaceインターフェイスが追加され、DateTimeとDateTimeImmutableはDateTimeInterfaceをimplementsするようになりました。
しかしIntlDateFormatter::formatなど、元々DateTimeを要求していたところが未だそのままになっていたりするなど、周囲の変更が追いついていないようです。
え?
<?php $today = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2014-01-01 00:00:00'); var_dump($today); object(DateTime)#3 (3) { ["date"]=> string(19) "2014-01-01 00:00:00" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "Asia/Tokyo" }これはひどい。
http://www.php.net/ChangeLog-5.php#5.5.5
PHP5.5.5で修正されたそうです。
https://bugs.php.net/bug.php?id=65548
え?
http://www.php.net/manual/ja/datetime.diff.php
> PHP 5.2.2 以降では、DateTime オブジェクトを 比較演算子 で比較できるようになりました。
<?php $today = new DateTimeImmutable('2014/01/01 00:00:00'); $tomorrow = new DateTimeImmutable('2014/01/02 00:00:00'); var_dump($today < $tomorrow , $today > $tomorrow, $today == $tomorrow); bool(false) bool(false) bool(false)これはひどい。
http://www.php.net/ChangeLog-5.php#5.5.5
PHP5.5.5で修正されたそうです。
http://bugs.php.net/65768
え?
http://jp2.php.net/manual/ja/datetime.diff.php
> public DateInterval DateTimeImmutable::diff ( DateTimeInterface $datetime2 [, bool $absolute = false ] )
<?php $now = new DateTimeImmutable('now'); $hour = new DateTimeImmutable('+1 hour'); var_dump($now->diff($hour)); DateTime::diff() must be derived from DateTimeImmutable::diffこれはひどい。
http://www.php.net/ChangeLog-5.php#5.5.8
PHP5.5.8で修正されたそうです。
DateTimeImmutableクラスはPHP5.5で追加されたクラスで、最初に設定した日時を変更することができないDateTimeです。
<?php $today = new DateTimeImmutable('2014/01/01 00:00:00'); $tomorrow = $today->modify('+1 day'); print($tomorrow->format('Y-m-d H:i:s')); // 2014-01-02 00:00:00 print($today->format('Y-m-d H:i:s')); // 2014-01-01 00:00:00のままDateTime::modify()は自分自身を変更しますが、DateTimeImmutable::modify()は自分は変えずに変更後の値を返すという挙動になります。
変えられない日付(イベントの日時など)を設定しておいて、それからの差分を求めたりなんかしたい場合に便利です。
が、しかしこうもバグがあると使うのが躊躇われますね。
PHP5.5からDateTimeInterfaceインターフェイスが追加され、DateTimeとDateTimeImmutableはDateTimeInterfaceをimplementsするようになりました。
しかしIntlDateFormatter::formatなど、元々DateTimeを要求していたところが未だそのままになっていたりするなど、周囲の変更が追いついていないようです。
PR