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