Qu’est-ce que InteractsWithTime
Illuminate\Support\InteractsWithTime est un trait qui regroupe les calculs de dates, de délais et de temps écoulé. Plus de 40 classes du framework Laravel font use InteractsWithTime; et il est employé dans un large éventail de composants : cache, files d’attente, console, connexions à la base de données, etc.
Le code source se trouve dans
src/Illuminate/Support/InteractsWithTime.php. Il n’expose que des méthodes protected et est conçu pour un usage interne aux classes.Exemples d’utilisation dans le framework
Détail des méthodes
secondsUntil() — nombre de secondes restantes
Retourne le nombre de secondes restant jusqu’à une date/valeur de délai spécifiée. L’argument peut être un DateTimeInterface, un DateInterval ou un entier représentant des secondes.
0 (jamais un nombre négatif).
availableAt() — timestamp UNIX de disponibilité
Renvoie un timestamp UNIX correspondant à l’instant actuel additionné du délai indiqué. Utilisé pour les délais de jobs en file d’attente ou le calcul de durées de vie de cache.
0), elle renvoie le timestamp de l’instant présent.
parseDateInterval() — convertit un DateInterval en DateTime
Reçue avec une instance de DateInterval, la méthode la convertit en une instance Carbon correspondant à l’instant présent additionné de l’intervalle. Les DateTimeInterface et les entiers sont renvoyés tels quels.
secondsUntil() et availableAt() appellent cette méthode en interne.
currentTime() — timestamp UNIX actuel
Un simple wrapper qui retourne Carbon::now()->getTimestamp(). Utilisé comme instant de référence par secondsUntil().
runTimeForHumans() — convertit un temps d’exécution en format lisible
Convertit l’écart entre l’instant de départ et l’instant de fin (mesurés avec microtime(true)) en une chaîne lisible.
42.15ms ; au-dessus, elle utilise la forme abrégée forHumans() de CarbonInterval (1s 234ms, etc.).
Un second argument permet de convertir un intervalle déjà mesuré.
Utilisations en développement de packages
Uniformiser le TTL d’un driver de cache
Utile lorsque vous créez une méthodeput(key, value, ttl) acceptant indifféremment int, DateInterval ou DateTime comme ttl.
Afficher le temps d’exécution d’une commande console
Utile pour afficher à l’utilisateur le temps d’exécution dans lehandle() d’une commande Artisan.
InteractsWithTime côté tests
Illuminate\Foundation\Testing\Concerns\InteractsWithTime est un trait distinct qui expose les méthodes travel*() permettant de manipuler le temps dans les tests (il est automatiquement intégré à TestCase).
Illuminate\Support\InteractsWithTime (le sujet de cette page) : attention à ne pas les confondre.
Récapitulatif
Si vous souhaitez concevoir une méthode acceptant indifféremment
int, DateInterval ou DateTimeInterface, use de ce trait vous évite de réimplémenter la logique de conversion.