Transformer nombre décimal en heure

Eléphant du PHP | 256 Messages

15 juil. 2011, 00:30

Bonjour.

Vos lumières me seraient encore nécessaires, car mes recherches ont fait "chou blanc". :)

Après un calcul, j'obtiens un résultat décimal, par exemple *-12.0628047865*.

Or, ce nombre correspond à un intervalle de temps (qui fluctue bien sûr, sinon je ne programmerai pas !)... Comment le convertir en minutes et secondes ?

Le résultat attendu serait, dans l'exemple, 12 minutes 03.76828719 secondes ou *12 minutes 04 secondes*, plus simplement.

Le code...
$lambda = -12.0628047865;
$decimal = explode('.', $lambda);
$minutes = $decimal[0];
$seconds = $decimal [1] * 60;
//...
ne donne rien, puisque le calcul du deuxième terme $decimal [1] s'effectue alors sans le point. De plus, après, je ne sais comment ajouter le résultat obtenu à $decimal[0],, y compris avec une concaténation.

J'espère avoir été clair. ^^

Merci pour votre aide. :mrgreen:

Cordialement,

Gaspard

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 juil. 2011, 01:38

Suis pas sur de tout n'avoir compris (c'est aussi à cause de l'heure), mais à priori, si tu retranches ton nombres de minutes à ton temps total, tu auras ton nombre de secondes qu'il te suffira alors de multiplier par 60 :
$lambda = -12.0628047865;
$decimal = explode('.', $lambda);
$minutes = floor($lambda);
$seconds = ($lambda - $minutes) * 60;
(A vérifier hein :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

devlop78
Invité n'ayant pas de compte PHPfrance

15 juil. 2011, 06:05

Du coup, tu peux enlever :
$decimal = explode('.', $lambda);
Qui est plus du bricolage qu'autre chose .. :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 juil. 2011, 11:07

Euh oui, certes, c'était un copier/coller malheureux ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

15 juil. 2011, 17:11

Bonjour,

Merci, Ryle et devlop78 de vous être penchés sur mon problème.

La conversion des heures est toujours un casse-tête. J'étais bien meilleur sur le sujet à l'école primaire... il y a environ 35 ans. :mrgreen:

Ceci posé, je me demande si un fmod n'aurait pas répondre à la question, mais je vais utiliser le floor de Ryle, voire un ceil.

Bien à vous,

Gaspard

Mammouth du PHP | 2278 Messages

15 juil. 2011, 20:47

Ie postule pour le nobel de la question bête:
lambda est exprimé en quoi?
car 12..368921 secondes c'est un peu différent de 12..368921 minutes et ainsi soit-il?
c'est comme si on disait
$température = 40;
$conversion = ($température -32)/(9/5);
Manque de chance, $température était en Celsius...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

devlop78
Invité n'ayant pas de compte PHPfrance

16 juil. 2011, 00:37

Ie postule pour le nobel de la question bête:
lambda est exprimé en quoi?
car 12..368921 secondes c'est un peu différent de 12..368921 minutes et ainsi soit-il?
c'est comme si on disait
$température = 40;
$conversion = ($température -32)/(9/5);
Manque de chance, $température était en Celsius...
Qu'est-ce qu'il dit ?

Code : Tout sélectionner

mais je vais utiliser le floor de Ryle, voire un ceil.
Ce n'est pas au petit bonheur la chance si floor a été utilisé ici ...

Mammouth du PHP | 2278 Messages

16 juil. 2011, 11:07

je dis des choses évidentes :
à savoir que si l'unité dans laquelle est exprimée une grandeur n'est pas précisée, aucune conversion dans aucune autre unité n'a de sens
$lambda = -12.0628047865;
$decimal = explode('.', $lambda);
$minutes = $decimal[0];
$seconds = $decimal [1] * 60
;
on peut supposer qu'il s'agit de minutes...
et que ceci montre la différence entre deux approches
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang = "fr">

<META http-equiv = 'Content-Type' content = 'text/html; charset = utf-8'>



<?PHP

	$lambdas = array (-59.9, -12, -12.0628047865, -12.1, -12.9,  12, 12.0628047865, 12.1, 12.9,59.9); 

	foreach ($lambdas as $lambda)

	{

		$lambda1 = abs($lambda);

		$minutes = intval( $lambda1);

		$secondes = round ((( $lambda1 - $minutes) *60), 0);

		print " <p>$lambda devient $minutes min  $secondes sec";



		$decimal = explode('.', $lambda);

		$minutes = floor($lambda);

		$seconds = ($lambda - $minutes) * 60;

		print " ou $minutes min  $seconds sec </p>";

}

?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 juil. 2011, 11:17

je dis des choses évidentes :
à savoir que si l'unité dans laquelle est exprimée une grandeur n'est pas précisée, aucune conversion dans aucune autre unité n'a de sens
C'est tout à fait juste, cependant si tu relis le sujet initial, tu verras qu'il ne peut s'agir ici que de minutes :)
ce nombre correspond à un intervalle de temps (qui fluctue bien sûr, sinon je ne programmerai pas !)... Comment le convertir en minutes et secondes ?

Le résultat attendu serait, dans l'exemple, 12 minutes 03.76828719 secondes ou *12 minutes 04 secondes*, plus simplement.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

17 juil. 2011, 00:37

Bonjour

> devlop78

Oui, tu as raison, il faut utiliser floor, mais j'aime bien expérimenter.

> aux autres

Ryle a parfaitement compris ma pensée.

Je ne suis pas futé pour le Php, mais je m'efforce de poser des questions précises : clarifier et préciser un problème permet, parfois, d'éviter une interrogation ici. Après, il arrive, parfois, que l'esprit soit fainéant et, dans ce cas, les remarques des contributeurs sont éclairantes. A l'issue de ce processus, vient la *réponse* à la question posée, si elle demeure. :)

Donc, je parlais bien de minutes, et il ne fallait pas être distrait par le nom de la variable "lambda", non signifiante.

Merci de votre attention.

Bien à vous,

Gaspard

Mammouth du PHP | 2278 Messages

17 juil. 2011, 08:53

Il ne faut utiliser ni floor qui ne rend pas la partie entière et donne -13 pour -12.3, ni ceil qui donne 13 pour 12.1, mais intval($labda); ou (int) $lambda; qui donnent toutes deux 12 dans les deux cas.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 256 Messages

17 juil. 2011, 12:37

Bonjour,

Ouyi, sirakawa, c'est bien vu. :mrgreen:

D'ailleurs, il me semble que intval conserve le signe, contrairement à floor.

Cordialement,

Gaspard