Skip to main content

InteractsWithTime とは

Illuminate\Support\InteractsWithTime は、時間・遅延・経過時間の計算をまとめたトレイトです。Laravel フレームワーク内では 40 以上のクラスが use InteractsWithTime; しており、キャッシュ・キュー・コンソール・データベース接続など幅広いコンポーネントで使われています。
ソースコードは src/Illuminate/Support/InteractsWithTime.php にあります。protected メソッドのみで構成されており、クラス内部から呼び出す用途を前提にしています。

フレームワーク内の使用例

メソッド解説

secondsUntil() — 残り秒数を取得

指定した日時・遅延値までの残り秒数を返します。引数には DateTimeInterfaceDateInterval・秒数の整数値のいずれかを渡せます。
過去の日時を渡すと 0 を返します(負にはなりません)。

availableAt() — 利用可能になる UNIX タイムスタンプ

現在時刻に遅延を加算した UNIX タイムスタンプを返します。キューのジョブ遅延やキャッシュの有効期限計算に使われます。
引数なし(デフォルト 0)で呼ぶと現在時刻のタイムスタンプを返します。

parseDateInterval() — DateInterval を DateTime に変換

DateInterval インスタンスを受け取ると、現在時刻に加算した Carbon インスタンスに変換して返します。DateTimeInterface や整数値はそのまま返します。
secondsUntil()availableAt() は内部でこのメソッドを呼んでいます。

currentTime() — 現在時刻の UNIX タイムスタンプ

Carbon::now()->getTimestamp() を返すシンプルなラッパーです。secondsUntil() の基準時刻として使われます。

runTimeForHumans() — 実行時間を人間が読みやすい形式に

microtime(true) で記録した開始時刻と終了時刻の差を、読みやすい文字列に変換します。
1000ms 未満は 42.15ms のように小数点付きミリ秒、1000ms 以上は CarbonInterval の forHumans() 短縮形式(1s 234ms など)で返します。 第2引数に終了時刻を渡すことで、計測済みの区間を変換することもできます。

パッケージ開発での活用

キャッシュドライバーの TTL 統一

put(key, value, ttl)ttl として intDateIntervalDateTime のいずれも受け付けるメソッドを作るときに便利です。

コンソールコマンドの処理時間表示

Artisan コマンドの handle() で処理時間をユーザーに表示する際に活用できます。

テスト用の InteractsWithTime

Illuminate\Foundation\Testing\Concerns\InteractsWithTime は別物で、テストケースで時間を操作する travel*() メソッドを提供します(TestCase に自動的に組み込まれます)。
Illuminate\Support\InteractsWithTime(本ページの対象)とは名前空間が異なるため、混同しないよう注意してください。

まとめ

引数に intDateIntervalDateTimeInterface のいずれも受け付けるメソッドを作りたい場合、このトレイトを use するだけで変換ロジックを再実装せずに済みます。

関連ページ

最終更新日 2026年7月12日