忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/05/09 07:45 |
PHP5.5.3 DateTimeImmutableで不変の日時
https://bugs.php.net/bug.php?id=65502
え?
<?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


2014/02/03 23:15 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<買ったものリスト 2014/02/09 | HOME | 買ったものリスト 2014/02/02>>
忍者ブログ[PR]