Code : Tout sélectionner
SELECT (TIME_TO_SEC('2005-10-01 15:45:00') - TIME_TO_SEC('2005-10-01 15:42:00')) / 60Code : Tout sélectionner
SELECT ((TIME_TO_SEC(debut_prb) - TIME_TO_SEC(fin_prb)) / 60) AS duree
FROM `alertes_monitoring`
WHERE HOUR(debut_prb) BETWEEN 15 AND 16
<?php
/*
nom : getNbMinutes()
description : détermine pour chaque jour, du jour de début au jour de fin compris,
le nombre de minutes qu'on a dans la tranche horaire et on fait le cumul
paramètres : $codetranche --> entier repésentant la tranche horaire pour le calcul (de 0 à 23)
0 pour de 00h à 01h, 15 pour de 15h à 16h, etc ...
$datedebut --> date de début de l'intervalle (sous la forme 2005-11-16 22:17:12 en chaine de caractères)
$datefin --> date de fin de l'intervalle (sous la forme 2006-07-28 15:01:17 en chaine de caractères)
retourne : le nombre de minutes qu'on a dans la tranche horaire entre les 2 dates
*/
function getNbMinutes($codetranche, $datedebut, $datefin)
{
$annee_debut = substr($datedebut,0,4);
$mois_debut = substr($datedebut,5,2);
$jour_debut = substr($datedebut,8,2);
$heure_debut = substr($datedebut,11,2);
$minute_debut = substr($datedebut,14,2);
$seconde_debut = substr($datedebut,17,2);
$annee_fin = substr($datefin,0,4);
$mois_fin = substr($datefin,5,2);
$jour_fin = substr($datefin,8,2);
$heure_fin = substr($datefin,11,2);
$minute_fin = substr($datefin,14,2);
$seconde_fin = substr($datefin,17,2);
$nb_minutes = 0;
$time_debut = mktime(0, 0, 0, $mois_debut, $jour_debut, $annee_debut);
$time_fin = mktime(0, 0, 0, $mois_fin, $jour_fin, $annee_fin);
$ecart = $time_fin - $time_debut;
$nb_jours = floor($ecart / 3600 / 24);
$nb_jours++;
if ( $nb_jours >= 3 )
{
$nb_minutes += 60 * ($nb_jours - 2) ;
if ( $heure_debut < $codetranche )
$nb_minutes += 60;
if ( $heure_debut == $codetranche )
$nb_minutes += (59 - $minute_debut);
if ( $heure_fin > $codetranche )
$nb_minutes += 60;
if ( $heure_fin == $codetranche )
$nb_minutes += $minute_fin;
}
else
if ( $nb_jours == 2 )
{
if ( $heure_debut < $codetranche )
$nb_minutes += 60;
if ( $heure_debut == $codetranche )
$nb_minutes += (59 - $minute_debut);
if ( $heure_fin > $codetranche )
$nb_minutes += 60;
if ( $heure_fin == $codetranche )
$nb_minutes += $minute_fin;
}
else // $nb_jours == 1
{
if ( ($heure_debut < $codetranche) && ( $heure_fin > $codetranche ) )
$nb_minutes += 60;
if ( ($heure_debut == $codetranche) && ( $heure_fin > $codetranche ) )
$nb_minutes += (59 - $minute_debut);
if ( ($heure_debut < $codetranche) && ( $heure_fin == $codetranche ) )
$nb_minutes += $minute_fin;
if ( ($heure_debut == $codetranche) && ( $heure_fin == $codetranche ) )
$nb_minutes += ($minute_fin - $minute_debut -1);
}
return $nb_minutes;
}
?>
J'ai testé en long et en large et il marche très bien.
echo "Resultat du calcul : ".getNbMinutes(15, "2005-05-23 18:05:57", "2005-05-28 12:56:11")." minutes";