Qué es InteractsWithTime
Illuminate\Support\InteractsWithTime es un trait que agrupa los cálculos de tiempo, retrasos y tiempos transcurridos. Dentro del framework, más de 40 clases hacen use InteractsWithTime;, y se emplea en componentes tan diversos como caché, colas, consola o conexiones de base de datos.
El código fuente está en
src/Illuminate/Support/InteractsWithTime.php. Todos sus métodos son protected, así que están pensados para ser invocados desde el interior de la clase que los usa.Ejemplos de uso dentro del framework
Métodos
secondsUntil() — obtener segundos restantes
Devuelve los segundos que quedan hasta la fecha/hora o retraso indicados. Puede recibir un DateTimeInterface, un DateInterval o un entero de segundos.
0 (no toma valores negativos).
availableAt() — timestamp UNIX en el que estará disponible
Devuelve el timestamp UNIX resultante de sumar el retraso al momento actual. Se usa para calcular retrasos de jobs en colas o tiempos de expiración de la caché.
0), devuelve el timestamp del momento actual.
parseDateInterval() — convertir un DateInterval en DateTime
Si recibe una instancia de DateInterval, la convierte en una instancia Carbon sumándola al momento actual. Los DateTimeInterface y enteros los devuelve sin cambios.
secondsUntil() y availableAt() invocan internamente este método.
currentTime() — timestamp UNIX del momento actual
Un wrapper simple que devuelve Carbon::now()->getTimestamp(). Se usa como base temporal en secondsUntil().
runTimeForHumans() — tiempo de ejecución en formato legible
Convierte la diferencia entre un tiempo de inicio y otro de fin registrados con microtime(true) en una cadena legible.
42.15ms; a partir de 1000 ms usa el formato corto de CarbonInterval::forHumans() (1s 234ms, etc.).
Pasando un segundo argumento con el tiempo final puedes convertir un intervalo ya medido.
Uso en el desarrollo de paquetes
Unificar el TTL en un driver de caché
Es útil cuando construyes un métodoput(key, value, ttl) en el que ttl puede ser int, DateInterval o DateTime.
Mostrar tiempo de ejecución en comandos de consola
Puedes aprovecharlo para mostrar al usuario el tiempo de proceso en elhandle() de un comando Artisan.
InteractsWithTime para pruebas
Illuminate\Foundation\Testing\Concerns\InteractsWithTime es otra cosa: ofrece los métodos travel*() para manipular el tiempo en los tests (se incorpora automáticamente a TestCase).
Illuminate\Support\InteractsWithTime (objeto de esta página), no los confundas.
Resumen
Si quieres crear métodos que acepten
int, DateInterval o DateTimeInterface como argumento, con solo hacer use de este trait te ahorras reimplementar la lógica de conversión.