Php mêmes fonctions, mêmes données, résultats différents

Fermé
lion - 9 janv. 2013 à 23:24
 lion - 10 janv. 2013 à 00:25
Bonjour,

J'ai le code suivant. À la fin du code j'ai mis l'affichage que j'obtiens. Il s'agit soit d'une erreur bête, d'une que je ne vois pas, ou d'un bug...

Merci pour votre aide !

<?php
date_default_timezone_set('UTC');

function formatHourToTime($input){
        if (strpos($input, '.') !== false){
                $array = explode(".",$input);
        }
        elseif (strpos($input, ':') !== false){
                $array = explode(":",$input);
        }
        elseif (strpos($input, ',') !== false){
                $array = explode(",",$input);
        }
        elseif ($input >= '0' & $input < '24'){
                $array = array($input);
        }
        else {
                $time = false;
                exit();
        }
        $time = $array[0]*3600+$array[1]*60+$array[2];
        return $time;
}

$matin_d = 0; //ts de minuit 0.00
$matin_f = 10800; //ts de 3h00
$soir_d = 79200; //ts de 22h00
$soir_f = 82799; //ts de 23h59:59

function nightwork($start, $end){
        //calcul du supplément pour heures de nuit
        //les 4 variables correspondent aux limites des horaires de nuit
        
        if ($start < $matin_f && $end > $soir_d) $totalheures = ($matin_f - $start)/2 + ($end - $soir_d)/2+100000;
        elseif ($start < $matin_f && $end < $matin_f) $totalheures = ($end - $start)/2+200000;
        elseif ($start >= $soir_d && $end > $soir_d) $totalheures = ($end - $start)/2+300000;
        elseif ($start < $matin_f) $totalheures = ($matin_f-$start)/2+400000;
        elseif ($end>$soir_d) $totalheures = ($end-$soir_d)/2+500000;
        else $totalheures = 0+600000; 
        
        return $totalheures;
}

    $start = formatHourToTime('07:39:00')*1;

    $end = formatHourToTime('08:00:00')*1;
    $shiftnw = nightwork($start, $end);
    if($start >= $soir_d && $end > $soir_f) $bool = 'true';
    else $bool = 'false';
//même code que la fonction nightwork
        if ($start < $matin_f && $end > $soir_d) $totalheures = ($matin_f - $start)/2 + ($end - $soir_d)/2+100000;
        elseif ($start < $matin_f && $end < $matin_f) $totalheures = ($end - $start)/2+200000;
        elseif ($start >= $soir_d && $end > $soir_d) $totalheures = ($end - $start)/2+300000;
        elseif ($start < $matin_f) $totalheures = ($matin_f-$start)/2+400000;
        elseif ($end>$soir_d) $totalheures = ($end-$soir_d)/2+500000;
        else $totalheures = 0+600000; 

    echo $start.' '.$end.'<br>';
    echo $totalheures. ' ' .$shiftnw; 
//totalheures est calculé dans le script de la page
//$shiftnw est le résultat de la fonction nightwork qui utilise les mêmes calculs que la fonction...
// prints :
// 27540 28800
// 600000 300630
?>


A voir également:

1 réponse

Utilisateur anonyme
9 janv. 2013 à 23:59
Bonjour

Les variables $matin_d,$matin_f,$soir_d et $soir_f sont définies à l'extérieur de la fonction nightwork, donc elles sont inconnues à l'intérieur de la fonction. La fonction doit utiliser la valeur 0 à la place de ces variables.

Pour accéder à ces variables à l'intérieur de la fonction, il faut les déclarer global :

function nightwork($start, $end){
        //calcul du supplément pour heures de nuit
        //les 4 variables correspondent aux limites des horaires de nuit
        global $matin_d,$matin_f,$soir_d,$soir_f;
       if ($start < $matin_f && $end >... 
1
Merci, ça marche maintenant :)
0