Skip to main content

什麼是 InteractsWithTime

Illuminate\Support\InteractsWithTime 是彙整了時間、延遲、經過時間計算的 trait。在 Laravel 框架內有超過 40 個類別 use InteractsWithTime;,於 Cache、Queue、Console、資料庫連線等廣泛的元件中使用。
原始碼位於 src/Illuminate/Support/InteractsWithTime.php。僅由 protected 方法組成,前提是由類別內部呼叫的用途。

框架內的使用範例

方法解說

secondsUntil() — 取得剩餘秒數

回傳至指定日期時間或延遲值的剩餘秒數。引數可傳入 DateTimeInterfaceDateInterval 或秒數整數其中之一。
若傳入過去的日期時間會回傳 0(不會為負數)。

availableAt() — 可用時的 UNIX 時間戳記

回傳於當前時刻加上延遲後的 UNIX 時間戳記。用於 Queue Job 延遲或 Cache 的有效期限計算。
若不帶引數(預設 0)呼叫,則回傳當前時刻的時間戳記。

parseDateInterval() — 將 DateInterval 轉為 DateTime

若接收 DateInterval 實例,會轉換為加至當前時刻的 Carbon 實例後回傳。DateTimeInterface 或整數值則原樣回傳。
secondsUntil()availableAt() 內部都會呼叫此方法。

currentTime() — 當前時刻的 UNIX 時間戳記

回傳 Carbon::now()->getTimestamp() 的簡單 wrapper。用作 secondsUntil() 的基準時刻。

runTimeForHumans() — 將執行時間轉為人類易讀的格式

將以 microtime(true) 記錄的起始時刻與結束時刻的差,轉換為易讀的字串。
未達 1000ms 時以如 42.15ms 帶小數點的毫秒表示,1000ms 以上則以 CarbonInterval 的 forHumans() 短縮形式(如 1s 234ms)回傳。 亦可將結束時刻傳入第 2 個引數,以轉換已量測的區間。

套件開發的活用

Cache Driver 的 TTL 統一

當要建立 put(key, value, ttl)ttl 可接受 intDateIntervalDateTime 皆可的方法時很方便。

Console 指令的處理時間顯示

Artisan 指令的 handle() 中向使用者顯示處理時間時可以活用。

測試用的 InteractsWithTime

Illuminate\Foundation\Testing\Concerns\InteractsWithTime 為另一物,提供在測試案例中操作時間的 travel*() 方法(會自動整合至 TestCase)。
Illuminate\Support\InteractsWithTime(本頁主題)命名空間不同,請留意勿混淆。

總結

若想建立引數可接受 intDateIntervalDateTimeInterface 任一者的方法,僅需 use 此 trait 即可省去重新實作轉換邏輯。

相關頁面

最後修改於 2026年8月2日