Aller au contenu

Addition de durées


Sujets conseillés

Posté

Bonjour,

J'aimerais pouvoir ajouter des durées en minutes afin d'obtenir un résultat en minutes (ou heures et minutes si nécessaire) via une fonction Calcul_Duree() par exemple.

Exemple :

echo Calcul_Duree(90); // Résultat 1h 30min

ou encore

echo Calcul_Duree(75); // Résultat 1h 15min

Merci par avance pour votre aide !

Posté

Re-bonsoir ;)

Pour plus de souplesse, je te conseilles d'avoir une fonction permettant de faire ce que tu souhaite depuis un nombre de secondes... pour plusieurs raisons (la fonction time, entre autres renvoie un nombre de secondes et donc les calculs s'effectuent souvent avec cette unité).

function duration($timestamp) {
$years = floor($timestamp / (60*60*24*365));
$timestamp %= 60*60*24*365;

$weeks = floor($timestamp / (60*60*24*7));
$timestamp %= 60*60*24*7;

$days = floor($timestamp / (60*60*24));
$timestamp %= 60*60*24;

$hrs = floor($timestamp / (60*60));
$timestamp %= 60*60;

$mins = floor($timestamp / 60);
$secs = $timestamp % 60;

$str = "";

if ($years >= 1) { $str .= $years.' année'.($years>1 ? 's' : '').' '; }
if ($weeks >= 1) { $str .= $weeks.' semaine'.($weeks>1 ? 's' : '').' '; }
if ($days >= 1) { $str .= $days.' jour'.($days>1 ? 's' : '').' '; }
if ($hrs >= 1) { $str .= $hrs.' heure'.($hrs>1 ? 's' : '').' '; }
if ($mins >= 1) { $str .= $mins.' minute'.($mins>1 ? 's' : '').' '; }
if ($secs >= 1) { $str .= $secs.' seconde'.($secs>1 ? 's' : '').' '; }

return $str;
}

Source : PHP Help: duration()

Je l'ai juste modifiée afin que les unités soient accordées correctement avec le nombre ou le chiffre qui les précèdent ;)

Posté (modifié)

Merci 1000 fois !

Ca peut me correspondre parfaitement...

Je vais abuser mais :

Est-il possible de ne pas passer à l'étape Jours/Mois/Années ?

Je m'explique : je développe une application où je dois afficher un temps de travail (en heures). Le problème avec la fonction que tu m'as proposée est que si une personnes travaille plus de 24h, cela passe en jours. Je voudrais rester en heures (25h, 27h, 35h etc !).

Merci par avance pour ton aide précieuse ! :)

Modifié par Phénol
Posté

Bonjour,

Hé bien, tu n'as pas dû cherché bien loin pour modifier cette fonction... enfin donne cela :

function duration($timestamp) {
$hrs = floor($timestamp / (60*60));
$timestamp %= 60*60;

$mins = floor($timestamp / 60);
$secs = $timestamp % 60;

$str = "";

if ($hrs >= 1) { $str .= $hrs.' heure'.($hrs>1 ? 's' : '').' '; }
if ($mins >= 1) { $str .= $mins.' minute'.($mins>1 ? 's' : '').' '; }
if ($secs >= 1) { $str .= $secs.' seconde'.($secs>1 ? 's' : '').' '; }

return $str;
}

Bref, j'ai juste supprimé les parties qui correspondaient à ce que tu ne souhaitait plus voir apparaître... le calcul s'effectuant sur la même variable ($timestamp) à laquelle on attribue le reste de la division (%=) à chaque saut d'unité, en partant bien entendu de la plus grosse unité que l'on souhait afficher, la modification n'est pas plus compliquée que cela.

Bonne continuation.

Posté

Ah ! Je pensais pas que ça serait si simple, je pensais faire ça et j'étais persuadé de partir sur une voie trop bateau pour fonctionner !!

Merci encore !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...