Convertir un nombre d'heures en jours / mois / années

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Convertir un nombre d'heures en jours / mois / années

par zepretender » 20 oct. 2006, 17:45

Formidable ! J'ai tout compris :)

Ai réussi à pondre quelque chose, c'est bancal coté code mais ça a le mérite d'exister :

$_POST['nbrHeures'] = nombre d'heures à convertir
$_POST['valeur'] = heures par jour

Code : Tout sélectionner

echo "<p>Voici le résultat de mes savants calculs. Vous avez entré ".$_POST['nbrHeures']." heures. En fonction de la période que vous avez sélectionné, cela donne : <p>"; echo "<p>"; // ANNEE ------------------------------------------- $annees = $_POST['nbrHeures'] / (360 * $_POST['valeur']); $annees = ((int) ($annees)); echo $annees." année(s)<br/>"; // modulo année $rest_annee = $_POST['nbrHeures'] % (360 * $_POST['valeur']); echo "Il reste : ".$rest_annee." heures après cette opération soit...<br/>"; // MOIS ------------------------------------------- $mois = $rest_annee / (30 * $_POST['valeur']); $mois = ((int) ($mois)); echo $mois." mois<br/>"; // modulo mois $rest_mois = $rest_annee % (30 * $_POST['valeur']); echo "Il reste : ".$rest_mois." heures après cette opération soit...<br/>"; // JOURS ------------------------------------------- $jours = $rest_mois / $_POST['valeur']; $jours = ((int) ($jours)); echo $jours." jours<br/>"; // modulo jours $rest_jours = $rest_mois % $_POST['valeur']; echo "Il reste : ".$rest_jours." heures après cette opération. Insuffisant pour faire une journée<br/>"; echo "</p>";
Merci en tous cas, ce modulo est vraiment une bénédiction pour ce genre de cas !

par zepretender » 20 oct. 2006, 16:54

Ok, je vous remercie pour votre aide, je vais maintenant jouer avec les opérateurs pour trouver la bonne formule.
Effectivement, le temps de travail journalier est important :

1 an = 360 jours
1 mois = 30 jours
1 jours = 7h (depuis le 1/1/2002), 7.8h (82-2002), 8h (avant 82)

Du coup, je vais partir sur :
entrez le nombre d'heure,
entrez la période,
valider...

et après... oulala !

Merci tout de même pour les quelques éclaircissements !

par Ryle » 19 oct. 2006, 17:55

Merci tout de même pour tes explications. J'ai pas tout pigé (le modulo par exemple) et ça m'a mis plus de doutes qu'autre chose (8h ou 24 ?)
Pour le modulo, c'est tout simplement le reste de la division euclidienne, par opposition au quotien.. ben quoi ? 8-[

En fait l'opération modulo te donne directement ce qui reste quand tu fais une division :
10 / 5 = il y va 2 fois et il reste 0
10 / 3 = il y va 3 fois et il reste 1
10 / 6 = il y va 1 fois et il reste 4

Quant au "8h ou 24h" par jour, je peux facilement t'oter du doute en renvoyant la question à ta direction : "Ouais, pas de problème votre calcul de modulo, les divisions euclidienne je maitrise... mais votre nombre de jours vous le voulez par tranche de 8 ou 24h ? à moins que je ne vous fasse la semaine à 35h ?" :)

par artotal » 19 oct. 2006, 17:39

mère Thérésa -->
Tu veux savoir combien de jours font 35h ? C'est ça ?
Enorme, lol.

par zepretender » 19 oct. 2006, 15:53

C'est pas plus compliqué que ça à mettre en place et si un jour ta direction te demande d'inclure les semaines ou de tout passer en secondes tu sauras le faire. Tu n'auras ainsi plus besoin de demander à quelqu'un de bénévole de te filer un script pour lequel tu es payé, et tu pourras en profiter pour te justifier d'une augmentation ;)
Hé hé... je sais, mais c'est tout le principe de la fonction publique : demander au chargé de comm' de faire des développements web. Quant aux augmentations ? le salaire au mérite n'existe (malheureusement) pas encore ici...

Merci tout de même pour tes explications. J'ai pas tout pigé (le modulo par exemple) et ça m'a mis plus de doutes qu'autre chose (8h ou 24 ?)... je vais leur dire qu'ils n'ont qu'à embaucher un informaticien qui fera ça mieux que moi ! J'ai suffisamment à faire avec inDesign en ce moment !

par Ryle » 19 oct. 2006, 12:26

Ok, en effet dans ce cas mktime sert surtout à travailler sur les dates (genre aujourd'hui + 300 heures = xx) Dans ton cas, c'est effectivement une simple conversion à base de divisions et de modulos (reste de la division) qu'il te faut.

Pour t'expliquer simplement, il suffit de diviser ton nombre par la plus grosse valeur, de récupérer la partie entière et d'utiliser le reste de cette division pour recommencer avec la valeur suivante :

Tout d'abord, il faut exprimer ce que tu recherches en heures (puisque c'est en heures que tu travailles) :
- une année = 365 jours * 24 heures = 8760h
- un mois = 30 jours * 24 heures = 720h
- une semaine = 7 jours * 24 heures = 168h (si nécessaire)
- un jour = 24 heures = 24h
...

Il te faut maintenant diviser ton nombre d'heure par ces valeurs, de récupérer la valeur entière et le reste de ta division et de recommencer.
Par exemple, 10.000 heures représentes :
10000 / 8760 = 1 année (reste 1240 heures)

A noter : l'opérateur % (appellé modulo) te permet de déterminer facilement le reste d'une division :
10000 % 8760 = 1240

Prenons donc ce reste et continuons pour savoir combien il y a de mois :
1240 / 720 = 1 mois
1240 % 720 = 520

(je pourrais tout aussi bien me passer de l'étaper année, et calculer directement le nombre de mois directement dans 10.000 heures)

Interessé par le nombre de semaines ?
520 / 168 = 3 semaines
520 % 168 = 16

Puis le nombre de jours ?
16 / 24 = 0
16 % 24 = 0

10.000 heures correspondent donc à 1 an, 1 mois, 3 semaines, 0 jours et 16 heures

Tu peux également zapper le nombre de semaine et passer directe au nombre de jours :
520 / 24 = 21 jours
520 % 24 = 16

10.000 heures correspondent à 1 an, 1 mois, 21 jours et 16 heures.

Tu peux même considérer la journée à 8h au lieu de 24h et refaire le calcul en fonction de tes besoins :)

C'est pas plus compliqué que ça à mettre en place et si un jour ta direction te demande d'inclure les semaines ou de tout passer en secondes tu sauras le faire. Tu n'auras ainsi plus besoin de demander à quelqu'un de bénévole de te filer un script pour lequel tu es payé, et tu pourras en profiter pour te justifier d'une augmentation ;)

par zepretender » 19 oct. 2006, 09:44

Je sais que l'idéal est de comprendre, mais là, je n'ai pas le temps : c'est un ordre que je dois appliquer. N'étant pas d'une logique implacable et sans formation informatique (docn, c'est ma seule passion qui fait avancer) il faut que j'avance malgré tout.

Ai épluché un peu mktime... rien compris !

Ma direction demande un truc simple (pour elle) : quand on embauche quelqu'un, on prend en compte les heures qu'elle a réalisé dans ses précédents emplois. Tout ceci est pris en compte par heures travaillées. Donc, il n'y a pas d'histoires de 28,30 ou 31. On entre un chiffre et on doit obtenir :

X annés, Y mois, Z jours

Je ne vois vraiment pas comment MKTIME peut faire ça...

Voila...

par mere-teresa » 18 oct. 2006, 10:36

Tu veux savoir combien de jours font 35h ? C'est ça ?

par Ryle » 18 oct. 2006, 09:59

A ta place, au lieu de reprendre un code dont tu ne saisis pas tout et pour lequel tu as besoin de l'aide du concepteur pour le faire évoluer, je me pencherais un peu plus sur la fonction que t'a indique Truc.

Elle est plus simple a utiliser qu'un calcul de modulo et a notamment l'avantage de gérer les mois de 28,29,30 et 31 jours pour te donner des valeurs exactes ;)

par zepretender » 18 oct. 2006, 08:17

Merci pour le dernier code, c'est une avancée énorme par rapport à ce qu'on veut. J'ai pas saisi tous les mécanismes + logique mais ça avance !!!

Puis-je te demander de m'ajouter le calcul des années (année, mois, jours) par rapport à cette date ?

Ce serai génial.

Merci beaucoup en tous cas !!!

par Ajoloca » 17 oct. 2006, 02:40

Bonsoir,
Voici un code en PHP dans sa plus simple expression (surtout pour l'affichage).
Si c'est juste pour l'avoir à l'ecran je te conseille de le faire en JavaScript (ça évitera des resources serveur et réseau) pour exactement le même résultat.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Convertir Heures ==> mois + jours + heures</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">
<meta http-equiv="expires" content="0">
<style type="text/css">
	input {
		text-align: right;
	}
	table, tr, th, td{
		text-align:center;
		border: solid 1px;
		margin: 0px 0px 0px 0px;
		padding:3px;
	}
</style>
<?php
	define('HEURES_JOUR', 24);
	define('JOURS_MOIS', 30);
	define('HEURES_MOIS', HEURES_JOUR * JOURS_MOIS);
?>
</head>
<body>
	<?php
		if(isset($_POST["nbrHeures"])){
			$mois = 0;
			if(is_int($_POST["nbrHeures"] * 1)){
				$nbrHeures = $_POST["nbrHeures"] * 1;
				$heures = $nbrHeures % HEURES_JOUR;
				if($nbrHeures >= HEURES_MOIS){
					$mois = floor($nbrHeures / HEURES_MOIS);
				}
				$nbrHeures -= $mois * HEURES_MOIS;
				$jours = floor($nbrHeures / HEURES_JOUR);
				echo '
					<table>
						<tr><th>Mois</th><th>Jours</th><th>Heures</th></tr>
						<tr><td>' . $mois . '</td><td>' . $jours . '</td><td>' . $heures . '</td></tr> 
					</table>';
			}
			else{
				echo ("Donn&eacute;es en entr&eacute;e INVALIDES");
			}
		}
	?>
	<form name="frm" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
	<input name="nbrHeures" type="text" value="Heures" />
	<input type="submit" name="valid" value="Convertir" />
	</form>
</body>
</html>

par Truc » 16 oct. 2006, 22:43

Salut,
Peut être que mktime() fera ton bonheur
Cette fonction prend en paramètres les différentes données d'une année ( = mois, jour, ... )

Normalement tu devrais pouvoir en resortir une date formatée comme tu le souhaites si tu passes 1010 heures.

Convertir un nombre d'heures en jours / mois / années

par zepretender » 16 oct. 2006, 22:39

Bonjour,

Mon employeur me demande de trouver un petit script qui permettra de convertir un nombre d'heures données en sa correspondance en jours / mois / années.

1 mois = 30 jours

Merci d'avance à celui ou celle qui trouvera !


par exemple :

1010 heures = 1 mois et 12 jours (+ 2 heures mais qui ne comptent pas)