8791 sujets

Développement web côté serveur, CMS

Hello à tous,

Je cherche à faire un truc qui semble simple (et qui l'est certainement mais je n'ai pas encore la bonne méthode je pense) :

J'ai des fichiers de log de sauvegardes qui contiennent des dates sous ce format :
Start time:   Sun Jan 18 22:00:00 2009
End time:     Mon Jan 19 03:37:57 2009


Le but est de déterminer la durée passée entre le début et la fin de la sauvegarde histoire de mettre ça en base de données et faire ensuite des stats.

J'ai donc extrait les données de cette façon :


$date = "Sun Jan 18 22:00:00 2009";

$heure = substr($date, 11, 2);
$minute = substr($date, 14, 2);
$seconde = substr($date, 17, 2);

$jour = substr($date, 8, 2);
$mois = substr($date, 4, 3);
$annee = substr($date, 20, 4);

$debutsave = mktime($heure, $minute, $seconde, $mois, $jour, $annee);

idem avec la deuxième date =>
$finsave = mktime($heure2, $minute2, $seconde2, $mois2, $jour2, $annee2);


Cependant $mois contient une valeur du type "Jan"... le mktime fonctionne quand même je crois ??

Comment ensuite comparer les 2 mktime et afficher la durée du type 5 heures 37 minutes et 57 secondes ?

Il ne me manque pas grand chose je pense mais pas moyen de trouver Smiley confused
Modifié par Bilgor Le Rouge (20 Jan 2009 - 16:34)
Bon je me suis résolu moi même mais il y a surement mieux...


    // Calcul du mktime de début de la sauvegarde
    $DateDebut = $DebutSave[1];
    $HeureDebut = substr($DateDebut, 11, 2);
    $MinuteDebut = substr($DateDebut, 14, 2);
    $SecondeDebut = substr($DateDebut, 17, 2);

    $JourDebut = substr($DateDebut, 8, 2);
    $MoisDebut = substr($DateDebut, 4, 3);
    $AnneeDebut = substr($DateDebut, 20, 4);

    // On transforme la date en timestamp
    $MktimeDebutSave = mktime($HeureDebut, $MinuteDebut, $SecondeDebut, $MoisDebut, $JourDebut, $AnneeDebut);

    // Calcul du mktime de fin de la sauvegarde
    $DateFin = $FinSave[1];
    $HeureFin = substr($DateFin, 11, 2);
    $MinuteFin = substr($DateFin, 14, 2);
    $SecondeFin = substr($DateFin, 17, 2);
    $JourFin = substr($DateFin, 8, 2);
    $MoisFin = substr($DateFin, 4, 3);
    $AnneeFin = substr($DateFin, 20, 4);
    $MktimeFinSave = mktime($HeureFin, $MinuteFin, $SecondeFin, $MoisFin, $JourFin, $AnneeFin);


    $DureeSaveMktime= $MktimeFinSave-$MktimeDebutSave;
    if($DureeSaveMktime > 0)
    {
      if($DureeSaveMktime >= 3600)
      {
        $NbHeuresSave = floor($DureeSaveMktime / 3600);

        // Nombre de minute(s)
        $NbMinutesSave = $DureeSaveMktime / (60);
        $NbMinutesSave2 = floor($DureeSaveMktime / (60*60));
        $NbMinutesSave3= $NbMinutesSave - ($NbMinutesSave2*60);
        $ExplodeTemps = explode(".", $NbMinutesSave3);
        $NbMinutesSave=$ExplodeTemps[0];

        if($NbMinutesSave==0)
        {
          $NbSecondesSave=($NbHeuresSave * 3600);
          $NbSecondesSave=$DureeSaveMktime - $NbSecondesSave;
        }
        else
        {
          // Nombre de seconde(s)
          $NbSecondesSave=$ExplodeTemps[1];
          $NbSecondesSave=(($NbSecondesSave*60)/100);
          $NbsecondesSave=$DureeSaveMktime / (60);
        }
      }
      elseif($DureeSaveMktime < 3600 && $DureeSaveMktime >= 60)
      {
        // Nombre de minute(s)
        $NbMinutesSave = $DureeSaveMktime / (60);
        $NbMinutesSave2 = floor($DureeSaveMktime / (60*60));
        $NbMinutesSave3= $NbMinutesSave - ($NbMinutesSave2*60);
        $ExplodeTemps = explode(".", $NbMinutesSave3);
        $NbMinutesSave=$ExplodeTemps[0];

        if (!isset($ExplodeTemps[1])) $ExplodeTemps[1]="0";
        // Nombre de seconde(s)
        $NbSecondesSave=$ExplodeTemps[1];
        $NbSecondesSave=(($NbSecondesSave*60)/100);
        $NbsecondesSave=$DureeSaveMktime / (60);
      }
      else
      {
        $NbSecondesSave=$DureeSaveMktime;
      }
      if (!isset($NbHeuresSave)) $NbHeuresSave="0";
      if (!isset($NbMinutesSave)) $NbMinutesSave="0";
      if (!isset($NbSecondesSave)) $NbSecondesSave="0";
      $DureeSave="$NbHeuresSave heure(s) $NbMinutesSave minute(s) $NbSecondesSave secondes";
    }
    else
    {
      $DureeSave="0 seconde";
    }

Modifié par Bilgor Le Rouge (20 Jan 2009 - 16:26)
Salut,

<?php
$date1 = "Sun Jan 18 22:00:00 2009";
$date2 = "Mon Jan 19 03:37:57 2009";
$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);
echo "La différence en heures est de ".abs($timestamp2 - $timestamp1)/3600;
echo "<br />La différence en jour est de ".abs($timestamp2 - $timestamp1)/86400;
?>
Grrrr je savais bien qu'il y avait plus simple Smiley biggol

Bon après il reste la conversion en bon français mais bon.
Enfin ce que j'ai fait au dessus fonctionne c'est déjà ça...

Merci. Smiley cligne