Calcul durée avec jours ouvrées

Discutez d'informatique ici !
Cliffe
Membre Rationnel
Messages: 955
Enregistré le: 12 Juin 2012, 14:25

Calcul durée avec jours ouvrées

par Cliffe » 13 Sep 2017, 14:54

Bonjour,

je cherche la méthode la plus rapide et efficace de résoudre mon problème.

Nos employés réalisent des tâches (t1, ..,tn) les unes après les autres.
On mémorise le début et la fin de réalisation de chacune d'entre elle (d_t1, f_t1) ... (d_tn, f_tn).
Sachant qu'une tâche peut démarrée un jour donnée et être clôturer plusieurs jours/semaines plus tard ...

Ma problématique est de calculer le temps total de réalisation des 'n' tâches. Sachant que les heures de travail sont 8h-12h => 13h30-17h30 du lundi au jeudi et 09h00-12h00 le vendredi.

Merci.



pascal16
Membre Complexe
Messages: 3416
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Calcul durée avec jours ouvrées

par pascal16 » 13 Sep 2017, 19:44

d_t1, f_t1 ont sans doute été calculés à partir de la durée de chaque tâche.

perso, je ferais ; une routine pour calculer le temps restant de chaque tâche.
-> il vaut la durée (que tu dois déjà avoir) si la tâche n'est pas commencée
-> il vaut le temps restant si la tâche est commencée
on fait la somme de toutes les durées.

danyL
Membre Relatif
Messages: 465
Enregistré le: 03 Jan 2015, 14:29

Re: Calcul durée avec jours ouvrées

par danyL » 13 Sep 2017, 20:49

un petit exemple numérique serait le bienvenu

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 18565
Enregistré le: 11 Nov 2009, 22:53

Re: Calcul durée avec jours ouvrées

par Ben314 » 13 Sep 2017, 22:54

Salut,
J'ai pas trop d'idée concernant le fait de savoir quelle serait la méthode la plus simple pour effectuer le calcul, mais par contre (et exceptionnellement....), j'ai l'impression d'avoir parfaitement compris la question.

Donc sur un exemple, ça donnerais ça :
L'ordi., en entrée tu lui donne ça :
Début de la tâche = Mercredi 13 septembre à 10h25
Fin de la tâche = Mardi 19 septembre à 14h45

Et ce qu'il doit te calculer c'est ça :
Mercredi 13 : travail de 10h25 à 12h puis de 13h30 à 17h30 soit 1h35 + 4h = 5h35
Jeudi 14 : travail de 8h à 12h puis de 13h30 à 17h30 => 4h + 4h = 8h
Vendredi 15 : travail de 9h à 12h => 3h
Lundi 18 : travail de 8h à 12h puis de 13h30 à 17h30 => 4h + 4h = 8h
Mardi 19 : travail de 8h à 12h puis de 13h30 à 14h45 => 4h + 1h15 = 5h15
Total = 29h50 (=5h35 + 8h + 3h + 8h + 5h15)

A mon avis, vu la vitesse des machines actuelles (et à moins que ce soit pour utiliser avec un langage de programmation bien pourri), on doit pouvoir se contenter d'une bête boucle qui parcours les jours en partant de celui de "début" jusqu'à celui "d'arrivé" avec un truc modulo 7 pour savoir quel jour de la semaine on est.
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

pascal16
Membre Complexe
Messages: 3416
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Calcul durée avec jours ouvrées

par pascal16 » 14 Sep 2017, 09:41

un plan de charge papier avec des étiquettes de couleur de la longueur de chaque tâche, c'était visuel et simple.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 5800
Enregistré le: 22 Nov 2007, 13:00

Re: Calcul durée avec jours ouvrées

par fatal_error » 17 Sep 2017, 17:21

hello,

pour suivre l'idée de ben, on peut s'épargner quelques boucles.
on peut considérer l'invariant 'la semaine' vu que qqsoit la semaine de travail, on a fait le même nombre d'heures.
Du coup
d1 => ts1, d2 => ts2 (où ts1, ts2 respectivement les timestamp de d1, d2,en ms)
nbSemaines = (ts2-ts1)/(semaineEnMs)
on a donc tpsTravaille = E(nbSemaines)*tpsParSemaine + leftOver
avec leftOver qui consiste à aller de l'heure courante de ts1, jusqu'à l'heure du "jour" de ts2.
si on nomme j1, j2 les jours de la semaine associés à ts1 et ts2.
alors si j2-j1 > 0
//j2 vient apres j1
leftOver = (j2-j1+1)*jourEnMs
sinon
//il faut boucler la semaine...
leftOver = (j1-j2+1-2)*jourEnMs
finsi
leftOver -= offset(j1,1)+offset(j2,-1)
avec offset(j, order) qui représente le temps travaillé depuis le début du jour au début du travail pour j1, et fin du travail à fin du jour pour j2
calcul offset(j,order):
si order==1
//calculer de 8h jusquà j
sinon
//calculer de j jusqu'à 17h30
fsi
si j.day()==vendredi
//enlever 1h (car on commence à 9h)
fsi


Deux parties que j'ai tenté d'optimiser (à vérifier)
1) - le modulo 7 de la semaine (je pense que c'est mieux)
2) - le calcul pour la semaine donnée (en "factorisant" les jours travaillés au lieu d'incrémenter par demi journées)

Je reste perplexe sur 2)...
la vie est une fête :)

Cliffe
Membre Rationnel
Messages: 955
Enregistré le: 12 Juin 2012, 14:25

Re: Calcul durée avec jours ouvrées

par Cliffe » 18 Sep 2017, 10:41

Je vais faire une simple boucle :

Code: Tout sélectionner
// Calcul durée d'une tâche 't'
duree_tache = 0; list_day = split_into_day(t)
for day in list_day:
    duree_tache += calculDuree(day)   

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite