2016-12-12 2 views
0

J'ai des durées en% RH: format i: s (comme +00: 00: 00 ou -00: 00: 00) et je veux les ajouter ou les soustraire (avec le négatif) et non dans les 24 heurescalculer les heures négatives et positives

Ex:

1/(09:30:15 + (- 10:00:00)) = -01: 30: 15.

2/22:00:00 + 03:00:00 = 25:00:00 (pas 01:00:00 + 1 jour)

Toute idée? Merci d'avance !

EDIT:

finalement fait. Je ne sais pas si c'est la bonne façon de le faire, mais ça marche plutôt bien. Trouvé à l'aide d'une autre fonction trouvée sur un forum.

function calc_hours($hour1,$hour2){ 

    $si1 = $hour1[0]; $si2 = $hour2[0]; 

    $hour1 = substr($hour1,1,8); 
    $hour2 = substr($hour2,1,8);   

    $secondes1=intval($si1.heure_to_secondes($hour1)); 
    $secondes2=intval($si2.heure_to_secondes($hour2)); 

    $somme=intval($secondes1+$secondes2); 

    //transfo en h:i:s 
    $s= ($somme % 60); 
    $m1= (($somme-$s)/60); 
    $m= ($m1 % 60); 
    $h= (($m1-$m)/60); 

    if($somme > 0) { $sif = '+'; } 
    $resultat=sprintf("%02d", $h).":".sprintf("%02d", abs($m)).":".sprintf("%02d", abs($s)).""; 
    return $sif.$resultat; 
} 

function heure_to_secondes($heure){ 
    $array_heure=explode(":",$heure); 
    $secondes=3600*$array_heure[0]+60*$array_heure[1]+$array_heure[2]; 
    return $secondes; 
} 

appeler comme: calc_hours ('+ 27:45:16', '- 02:35:12');

+0

Oui, n'utilisez pas 'date()' ou la classe 'datetime'. – Daan

+0

Plus d'infos? Que dois-je utiliser si je ne peux pas utiliser la classe date() ou datetime? – hellodracon

+0

Vous devez créer une formule vous-même. Un datetime va toujours calculer avec 24 heures. – Daan

Répondre

0

Enfin l'a fait. Je ne sais pas si c'est la bonne façon de le faire, mais ça marche plutôt bien. Trouvé à l'aide d'une autre fonction trouvée sur un forum.

function calc_hours($hour1,$hour2){ 

    $si1 = $hour1[0]; $si2 = $hour2[0]; 

    $hour1 = substr($hour1,1,8); 
    $hour2 = substr($hour2,1,8);   

    $secondes1=intval($si1.heure_to_secondes($hour1)); 
    $secondes2=intval($si2.heure_to_secondes($hour2)); 

    $somme=intval($secondes1+$secondes2); 

    //transfo en h:i:s 
    $s= ($somme % 60); 
    $m1= (($somme-$s)/60); 
    $m= ($m1 % 60); 
    $h= (($m1-$m)/60); 

    if($somme > 0) { $sif = '+'; } 
    $resultat=sprintf("%02d", $h).":".sprintf("%02d", abs($m)).":".sprintf("%02d", abs($s)).""; 
    return $sif.$resultat; 
} 

function heure_to_secondes($heure){ 
    $array_heure=explode(":",$heure); 
    $secondes=3600*$array_heure[0]+60*$array_heure[1]+$array_heure[2]; 
    return $secondes; 
} 

appeler comme: calc_hours ('+ 27:45:16', '- 02:35:12');