2017-08-11 3 views
1

Ma base de données comporte un horodatage de début et un horodatage de fin. Bien que je n'ai pas encore eu beaucoup d'expérience avec les fonctions, j'ai créé une fonction qui produit essentiellement une durée en heures et minutes, c'est-à-dire la différence entre le début et la fin.PHP Fonction retour utilisation, pas d'écho, stockage en tant que variable.

Tout fonctionne, mais il imprime automatiquement, ce que je voudrais atteindre est la possibilité de stocker le résultat en tant que variable et l'écho.

Voici la fonction:

function session_duration($start, $end) { 
    $date_start = new DateTime($start); //start time 
    $date_end = new DateTime($end); //end time 
    $interval = $date_start->diff($date_end); 
    $duration_hours = $interval->format('%H'); 
    $duration_mins = $interval->format('%i'); 
    if ($duration_hours != '0') { 
     echo $duration_hours . 'hrs '; 
    } 
    if ($duration_mins != '0') { 
     echo $duration_mins . 'min'; 
     if ($duration_mins > '1') { 
      echo 's'; 
     }   
    } 
} 

Alors, où je place session_duration($start, $end) sur la page, la durée est indiquée, ce que je voudrais être en mesure de faire est:

$duration = session_duration($start, $end); 
echo 'Duration: ' . $duration; 

I supposons que ce que je cherche, c'est le conseil sur comment, presque, construire un retour de fin, une compilation de la sortie qui n'est pas répercutée dans la fonction, mais je manque de connaissances. Toute aide serait reçue avec gratitude.

Répondre

4
function session_duration($start, $end) { 
    $date_start = new DateTime($start); //start time 
    $date_end = new DateTime($end); //end time 
    $interval = $date_start->diff($date_end); 
    $duration_hours = $interval->format('%H'); 
    $duration_mins = $interval->format('%i'); 

    $return_string = ""; 

    if ($duration_hours != '0') { 
     $return_string = $return_string . $duration_hours . 'hrs '; 
    } 
    if ($duration_mins != '0') { 
     $return_string = $return_string . $duration_mins . 'min'; 
     if ($duration_mins > '1') { 
      $return_string = $return_string . 's'; 
     }   
    } 

    return $return_string; 

} 

Ou vous pouvez utiliser $return_string .= ___ au lieu de $return_string = $return_string . ___

1

les mots-clés que vous recherchez est de retour

function session_duration($start, $end) { 
    $date_start = new DateTime($start); //start time 
    $date_end = new DateTime($end); //end time 
    $interval = $date_start->diff($date_end); 
    $duration_hours = $interval->format('%H'); 
    $duration_mins = $interval->format('%i'); 
    $returnValue = ""; 
    if ($duration_hours != '0') { 
     $returnValue += $duration_hours . 'hrs '; 
    } 
    if ($duration_mins != '0') { 
     $returnValue += $duration_mins . 'min'; 
     if ($duration_mins > '1') { 
      $returnValue += "s"; 
     }   
    } 

retour returnValue de $; }

+1

Le '+ =' n'est pas utilisé pour les chaînes. Je pense que vous vouliez dire '. ='. – Thanasis

+0

Ceci est génial, maintenant vous deux avez mentionné '+ =' et '. =' J'ai pu me renseigner sur ** les opérateurs d'affectation **, ce qui est exactement ce que je cherchais, un moyen de construire un résultat final, puis ** return ** comme opposé à ** echo **. Merci @connormcwood et @Thanasis, vous m'avez éduqué et je suis reconnaissant! – morgyface

+1

@morgyface Vous devez marquer la réponse de Thanasis comme la question acceptée. Dans ce cas, il était correct, et ce que vous avez demandé. Continuez comme ça! – connormcwood