[php] Calcul de Diférence entre deux heure

Bonjour,

Je n’arrive absolument pas a trouvé comment faire pour calculer la diférence entre deux heure:

$h1 = ("12:30);
$h2 = ("03:00);

$h6 = ($h2 -$h1);

echo "$h6" ;

( En c’est ce que je veux arrive a faire )

Ca marche pas :frowning:

Saluton,
T’es mignon mais dans quel langage de programmation ?

En php :slight_smile:

<?php
$h1=strtotime("12:30:00");
$h2=strtotime("03:00:00");
echo date('H:i',$h1-$h2);
?>

yes yes yes !!!! merci beaucoup ,

Franchement j’ai trop galerer …

merci

En fait ca devient bizare …

J’envoie a partir de 2 liste de formulaire l’heure de depart et l’heure d’arrive :

dep : 09:00 Arr: 12:00

Ce que je veux c’est le nombre de temp entre l’arrive et le départ.

Mais il me dit que ca fait 4h …

Comprend pas tout ca devrait faire 3h ?

La j’essaye d’enlever une heure a chaque arrivé ( 12:00 = 11:00 )

Mais ca marche pas:

$h1=strtotime("12:00");
$h2=strtotime("09:00");
$h3=strtotime("01:00");

echo date(‘H:i’,$h1-$h2-$h3);

Exact, on doit avoir un problème de gestion d’intervalle. Je vais regarder la doc.
Par contre, je remarque que tu ne mets pas les secondes dans strtotime() et ça, je ne pense pas que php apprécie.

je vais essayer avec les secondes

9a vient peut-être de là[quote=""]
Notes
Attention

En PHP 5 supérieur à 5.0.2, “now” et les autres valeurs de temps relatives sont incorrectement calculées depuis minuit du jour courant. Ce comportement diffère des versions antérieures où elles étaient correctement calculées depuis l’heure courante.
[/quote]

hum ah …

$h1=strtotime("12:00:00");

$h3=strtotime("02:00:00");

$h4 = ($h2-$h3);

Echo date("H:i:s",$h4);

Ca enleve qu’ 1h a 12h

Maintenant il faut que j’arrvie a calculer la suite …

$h4 - $h2

Ca y est !!! enfin ca marche ( du moins ca a l’air ) …

$h1=strtotime($lunamde);
$h2=strtotime($lunama);
$h3=strtotime("02:00:00");
$h4 = ($h2-$h3);
$h5 = ($h4-$h1);
Echo date("H:i:s",$h5);

nouveau pb …

Alors en fait j’ai 4 listes de formulaire qui m’envoie :

h debut matin ----- h fin matin
h debut aprem ---- h fin aprem :

$h1=strtotime(“12:00:00”);
$h2=strtotime(“07:00:00”);
$h3=strtotime(“02:00:00”); // valeur de soustraction pour avoir 12h - 1h
$h4 = ($h2-$h3);
$h5 = ($h4-$h1);
Echo date(“H:i”,$h5); // la c’est tout bon

$hp1=strtotime($lunpmde);
$hp2=strtotime($lunpma);
$hp3=strtotime(“02:00:00”);
$hp4 = ($hp2-$hp3);
$hp5 = ($hp4-$hp1);
Echo date(“H:i”,$hp5); // la c’est tout bon aussi

En voulant ajouter les heure du matin + les heures de l’aprem :

echo date(“H:i”,$hp5+$h5); // mais alors la il m’indique : 17h28 …

mon fichier f_date.php que je reutilise partout

tu converti tou en ts (timestamp) et tu fait t calcul puis reconversion …


<?

function date_db2ts($db)
{
	$ts=0;
	if ( ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})", $db, $regs ) )
  $ts = mktime($regs[4],$regs[5],$regs[6],$regs[2],$regs[3],$regs[1]);
	else if ( ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})", $db, $regs ) )
  $ts = mktime(0,0,0,$regs[2],$regs[3],$regs[1]);
	return $ts;
}

function date_fr2ts($db)
{
	$ts=0;
	if ( ereg( "([0-9]{2})/([0-9]{2})/([0-9]{4})", $db, $regs ) )
  $ts = mktime(0,0,0,$regs[2],$regs[1],$regs[3]);
	return $ts;
}

function date_ts2db($ts, $trunc = FALSE)
{
	if($ts<=0) return("0000-00-00 00:00:00");
	if ($trunc) return strftime("%Y-%m-%d 00:00:00",$ts);
	return strftime("%Y-%m-%d %H:%M:%S",$ts);
}

function date_ts2fr($ts)
{
	return strftime("%d/%m/%Y",$ts);
}

function date_db2fr($db)
{
	$fr="";
	if ( ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})", $db, $regs ) )
  $fr = "$regs[3]/$regs[2]/$regs[1]";
	if($fr=="00/00/0000")$fr="";
	return $fr;
}

function date_fr2db($fr)
{
	if ( ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $fr, $regs ) )
	{
  $a=(int)$regs[3];
  $m=(int)$regs[2];
  $j=(int)$regs[1];
  if ( checkdate($m,$j,$a) ) return sprintf("%04d-%02d-%02d 00:00:00",$a,$m,$j);
	}
	return("0000-00-00 00:00:00"); 
}

function date_checkfr($fr)
{
	if ( ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $fr, $regs ) )
	{
  $a=(int)$regs[3];
  $m=(int)$regs[2];
  $j=(int)$regs[1];
  if ( checkdate($m,$j,$a) ) return TRUE;
	}
	return FALSE;
}

function heure_db2fr($db)
{
	$fr="";
	if ( ereg( "([0-9]{2}):([0-9]{2})", $db, $regs ) )
  $fr = "$regs[1]:$regs[2]";
	return $fr;
}

function heure_db2s($db)
{
	$s="";
	if ( ereg( "([0-9]{2}):([0-9]{2}):([0-9]{2})", $db, $regs ) )
  $s = $regs[1]*3600+$regs[2]*60+$regs[3];
	return $s;
}

function heure_s2db($s)
{
	return sprintf("%02d:%02d:%02d",$s/3600,($s/60)%60,$s%60);
}

function heure_fr2db($fr)
{
	if ( ereg( "([0-9]{1,2}):([0-9]{1,2})", $fr, $regs ) )
	{
  $h=(int)$regs[1];
  $m=(int)$regs[2];
  if ( $h>=0 && $h<24 && $m>=0 && $m<60 ) return sprintf("%02d:%02d:00",$h,$m);
	}
	return("00:00:00"); 
}

function heure_checkfr($fr)
{
	if ( ereg( "([0-9]{1,2}):([0-9]{1,2})", $fr, $regs ) )
	{
  $h=(int)$regs[1];
  $m=(int)$regs[2];
  if ( $h>=0 && $h<24 && $m>=0 && $m<60 ) return TRUE;
	}
	return FALSE;
}

function date_fmt2ts($fmt,$str)
{
	$fmtregs=array();
	$l=strlen($fmt);
	$lfmt=strtolower($fmt);
	$efmt="";
	$i=0;
	$r=0;
	while($i<$l)
	{
  $sfmt=substr($lfmt,$i,4);
  if(strncmp("aaaa",$sfmt,4)==0) { $fmtregs[++$r]="yyyy"; $efmt.="([0-9]{1,4})"; $i+=4; }
  else if(strncmp("aa",$sfmt,2)==0) { $fmtregs[++$r]="yy"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("dd",$sfmt,2)==0) { $fmtregs[++$r]="dd"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("hh",$sfmt,2)==0) { $fmtregs[++$r]="hh"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("jj",$sfmt,2)==0) { $fmtregs[++$r]="dd"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("mi",$sfmt,2)==0) { $fmtregs[++$r]="mi"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("mm",$sfmt,2)==0) { $fmtregs[++$r]="mm"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("yyyy",$sfmt,4)==0) { $fmtregs[++$r]="yyyy"; $efmt.="([0-9]{1,4})"; $i+=4; }
  else if(strncmp("yy",$sfmt,2)==0) { $fmtregs[++$r]="yy"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else if(strncmp("ss",$sfmt,2)==0) { $fmtregs[++$r]="ss"; $efmt.="([0-9]{1,2})"; $i+=2; }
  else { $efmt.="[".substr($fmt,$i,1)."]"; $i++; }
	}
	if(!eregi($efmt,$str,$valregs)) return FALSE;
	$vals=array();
	for($i=1;$i<=$r;$i++)
  $vals[$fmtregs[$i]]=$valregs[$i];

	if(isset($vals["yy"])&&!isset($vals["yyyy"])) $vals["yyyy"]=$vals["yy"];
	if(!isset($vals["hh"])) $vals["hh"]=0;
	if(!isset($vals["mi"])) $vals["mi"]=0;
	if(!isset($vals["ss"])) $vals["ss"]=0;
	if($vals["hh"]+$vals["mi"]+$vals["ss"]+$vals["mm"]+$vals["dd"]+$vals["yyyy"]==0) return (-1);
	return mktime($vals["hh"],$vals["mi"],$vals["ss"],$vals["mm"],$vals["dd"],$vals["yyyy"]);
}

function date_ts2fmt($fmt,$ts)
{
	if ($ts<=0) return "";
	$fmtregs=array();
	$l=strlen($fmt);
	$lfmt=strtolower($fmt);
	$ofmt="";
	$i=0;
	while($i<$l)
	{
  $sfmt=substr($lfmt,$i,4);
  if(strncmp("aaaa",$sfmt,4)==0) { $ofmt.="%Y"; $i+=4; }
  else if(strncmp("aa",$sfmt,2)==0) { $ofmt.="%y"; $i+=2; }
  else if(strncmp("dd",$sfmt,2)==0) { $ofmt.="%d"; $i+=2; }
  else if(strncmp("hh",$sfmt,2)==0) { $ofmt.="%H"; $i+=2; }
  else if(strncmp("jj",$sfmt,2)==0) { $ofmt.="%d"; $i+=2; }
  else if(strncmp("mi",$sfmt,2)==0) { $ofmt.="%M"; $i+=2; }
  else if(strncmp("mm",$sfmt,2)==0) { $ofmt.="%m"; $i+=2; }
  else if(strncmp("yyyy",$sfmt,4)==0) { $ofmt.="%Y"; $i+=4; }
  else if(strncmp("yy",$sfmt,2)==0) { $ofmt.="%y"; $i+=2; }
  else if(strncmp("ss",$sfmt,2)==0) { $ofmt.="%S"; $i+=2; }
  else { $ofmt.=substr($fmt,$i,1); $i++; }
	}
	return strftime($ofmt,$ts);
}

    /*
$fmt="dd/mm/yy hh:mi:ss";
    
echo date_ts2fmt($fmt,date_fmt2ts($fmt,"23/02/77 13:00:10"));
*/
?>


Oula !!! hum ca va chauffer pour comprendre je suis pas si bon que ca !! :slight_smile:

Désolé de remonter ce sujet mais j’ai rencontré le même problème et comme c’est le 1er lien sur google :wink: je vais donner la solution que j’ai trouvé.

<?php $h1=strtotime("12:30:00"); $h2=strtotime("03:00:00"); echo gmdate('H:i',$h1-$h2); ?>

En effet si tu utilises gmdate au lieu de date ton problème d’une heure en trop sera résolu ;).
Edité le 07/12/2009 à 14:45