HOWTO · PHP
Comment calculer une différence de temps en minutes en PHP
Apprenez à calculer en PHP les minutes écoulées et les différences entre dates calendaires. Cet article présente `date_diff()` et des calculs fondés sur les horodatages.
Sur cette page
Pour calculer en minutes le temps écoulé entre deux valeurs date-heure PHP, soustrayez leurs horodatages Unix, puis divisez le nombre de secondes par 60. Choisissez cette méthode lorsque vous avez besoin d’une durée. Utilisez date_diff() pour obtenir un intervalle calendaire et strtotime() si les valeurs sont des chaînes analysables. Gardez les deux valeurs dans le même contexte de fuseau horaire et décidez si le résultat doit conserver son signe ou représenter une valeur absolue.
Calculer les minutes écoulées à partir des horodatages
DateTimeImmutable rend les valeurs d’entrée explicites et évite de les modifier pendant le calcul. Définissez un fuseau horaire pour les deux valeurs ; l’exemple utilise UTC. La soustraction des horodatages donne un nombre signé de secondes écoulées : une heure de fin postérieure produit un résultat positif, et le signe dépend de l’ordre de la soustraction. Utilisez abs() autour de la différence uniquement si le sens du résultat importe peu. La division par 60 conserve les fractions de minute ; utilisez une fonction d’arrondi seulement si l’application exige un nombre entier de minutes.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
<?php
$timezone = new DateTimeZone('UTC');
$start = new DateTimeImmutable('2024-06-16 09:15:00', $timezone);
$end = new DateTimeImmutable('2024-06-16 10:00:00', $timezone);
$elapsedMinutes = ($end->getTimestamp() - $start->getTimestamp()) / 60;
echo "Elapsed minutes: $elapsedMinutes\n";
Pour calculer le temps réellement écoulé lors d’un changement d’heure, utilisez les horodatages de valeurs date-heure définies dans le fuseau voulu. Dans un fuseau qui applique le changement d’heure, ne supposez pas qu’une journée calendaire correspond toujours à exactement 1 440 minutes écoulées.
Utiliser date_diff() pour calculer les différences entre dates calendaires
date_diff() (également accessible avec $start->diff($end)) renvoie un DateInterval, et non un nombre unique de minutes écoulées. Ses composantes en jours, heures et minutes sont utiles lorsque la question porte sur un intervalle calendaire, par exemple : « combien de jours, d’heures et de minutes séparent ces deux dates ? » La propriété invert de l’intervalle indique le sens lorsque la date de fin précède la date de début ; l’argument absolute permet d’ignorer ce sens.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
<?php
$timezone = new DateTimeZone('UTC');
$start = new DateTimeImmutable('2024-06-16 09:15:00', $timezone);
$end = new DateTimeImmutable('2024-06-18 12:30:00', $timezone);
$interval = date_diff($start, $end);
echo $interval->format('%R%a days, %h hours, and %i minutes');
Pour un intervalle calendaire, vous pouvez calculer un nombre nominal de minutes à partir de ses composantes avec $interval->days * 1440 + $interval->h * 60 + $interval->i. Ce calcul combine les jours calendaires et les composantes horaires ; il ne remplace pas la soustraction des horodatages si vous avez besoin du nombre exact de minutes écoulées lors de transitions de fuseau horaire. Si le sens compte, conservez le signe de l’intervalle ou appliquez-le à la valeur calculée à l’aide de $interval->invert.
Analyser des chaînes horaires avec strtotime()
strtotime() convertit une chaîne date-heure analysable en horodatage Unix. Une chaîne contenant uniquement l’heure est interprétée par rapport à un contexte de date : fournissez donc des dates complètes si les valeurs peuvent franchir minuit ou correspondre à des jours différents. Définissez explicitement le fuseau horaire par défaut, ou incluez un fuseau horaire dans chaque chaîne, afin que les deux horodatages utilisent le contexte voulu. La soustraction ci-dessous conserve le signe du résultat ; utilisez abs() pour obtenir une durée sans signe.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
<?php
date_default_timezone_set('UTC');
$start = strtotime('2024-06-16 23:30:00 UTC');
$end = strtotime('2024-06-17 00:15:00 UTC');
$minutes = ($end - $start) / 60;
echo "Elapsed minutes: $minutes\n";
Pour des entrées non fiables ou variables, vérifiez que chaque appel a renvoyé un horodatage avant de procéder à la soustraction : l’analyse peut échouer et renvoyer false. Pour des données d’application qui exigent une gestion explicite des fuseaux horaires, préférez créer des objets DateTimeImmutable avec un fuseau horaire défini. Utilisez strtotime() pour analyser rapidement une chaîne, la soustraction d’horodatages pour calculer une durée écoulée, et date_diff() lorsque vous devez décrire l’intervalle calendaire lui-même.