InteractsWithTime とは
Illuminate\Support\InteractsWithTime は、時間・遅延・経過時間の計算をまとめたトレイトです。Laravel フレームワーク内では 40 以上のクラスが use InteractsWithTime; しており、キャッシュ・キュー・コンソール・データベース接続など幅広いコンポーネントで使われています。
ソースコードは
src/Illuminate/Support/InteractsWithTime.php にあります。protected メソッドのみで構成されており、クラス内部から呼び出す用途を前提にしています。フレームワーク内の使用例
メソッド解説
secondsUntil() — 残り秒数を取得
指定した日時・遅延値までの残り秒数を返します。引数には DateTimeInterface・DateInterval・秒数の整数値のいずれかを渡せます。
0 を返します(負にはなりません)。
availableAt() — 利用可能になる UNIX タイムスタンプ
現在時刻に遅延を加算した UNIX タイムスタンプを返します。キューのジョブ遅延やキャッシュの有効期限計算に使われます。
0)で呼ぶと現在時刻のタイムスタンプを返します。
parseDateInterval() — DateInterval を DateTime に変換
DateInterval インスタンスを受け取ると、現在時刻に加算した Carbon インスタンスに変換して返します。DateTimeInterface や整数値はそのまま返します。
secondsUntil() と availableAt() は内部でこのメソッドを呼んでいます。
currentTime() — 現在時刻の UNIX タイムスタンプ
Carbon::now()->getTimestamp() を返すシンプルなラッパーです。secondsUntil() の基準時刻として使われます。
runTimeForHumans() — 実行時間を人間が読みやすい形式に
microtime(true) で記録した開始時刻と終了時刻の差を、読みやすい文字列に変換します。
42.15ms のように小数点付きミリ秒、1000ms 以上は CarbonInterval の forHumans() 短縮形式(1s 234ms など)で返します。
第2引数に終了時刻を渡すことで、計測済みの区間を変換することもできます。
パッケージ開発での活用
キャッシュドライバーの TTL 統一
put(key, value, ttl) の ttl として int・DateInterval・DateTime のいずれも受け付けるメソッドを作るときに便利です。
コンソールコマンドの処理時間表示
Artisan コマンドの handle() で処理時間をユーザーに表示する際に活用できます。
テスト用の InteractsWithTime
Illuminate\Foundation\Testing\Concerns\InteractsWithTime は別物で、テストケースで時間を操作する travel*() メソッドを提供します(TestCase に自動的に組み込まれます)。
Illuminate\Support\InteractsWithTime(本ページの対象)とは名前空間が異なるため、混同しないよう注意してください。
まとめ
引数に
int・DateInterval・DateTimeInterface のいずれも受け付けるメソッドを作りたい場合、このトレイトを use するだけで変換ロジックを再実装せずに済みます。