Help us understand the problem. What is going on with this article?

PHP 7.1からDateTimeが現在時刻のマイクロ秒まで見るようになった

More than 3 years have passed since last update.

表題の通りですが、PHP 7.1からDateTimeおよびDateTimeImmutableの挙動が変わり、現在時刻にマイクロ秒まで反映されるようになりました。日付文字列を相対的な書式で与えた場合も同様にマイクロ秒が反映されます。

<?php
$dt1 = new DateTime();
$dt2 = new DateTime("first day of next month");
$dt3 = new DateTime("2016-12-24");
var_dump($dt1->format("Y-m-d H:i:s.u")); // string(26) "2016-12-24 06:59:17.930886"
var_dump($dt2->format("Y-m-d H:i:s.u")); // string(26) "2017-01-01 06:59:17.931709"
var_dump($dt3->format("Y-m-d H:i:s.u")); // string(26) "2016-12-24 00:00:00.000000"

PHP 7.0.x以前ではマイクロ秒を明示的にコンストラクタ引数として与えたときだけマイクロ秒がセットされていました。つまり、上の例であれば2016-12-24 06:59:17.000000などを返していました。

この変更のため、DateTime同士を比較するようなテストコードが動かなくなることがあるかもしれません1。このことはPHPマニュアルにも書いてあります(「DateTime constructor incorporates microseconds」)。


  1. この変更で影響を受けるテストコードは元々秒またぎのバグを抱えている気がしますが… 

hnw
境界値バグが大好物。自分の日記で書くには小ネタすぎるネタをQiitaに書いています。
https://hnw.hatenablog.com/
klab
モバイルオンラインゲーム、その他スマートフォン関連サービス、及びサーバーインフラ開発・運用
http://www.klab.com/jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした