Décomposer des durées

JavaScript, mais c'est plus de l'algo...

a marqué ce sujet comme résolu.

Coucou,

Je suis en train de me faire un script me permettant de calculer mes prestations (mes heures, mes primes). Je suis confronté à quelques interrogations au niveau de la décomposition des durées.

Par exemple si je travaille de 14h00 à 22h15 en semaine, les tranches se divisent comme suit :

  • de 14h à 16h : prestation normale
  • de 16h à 22h : prestation irrégulière (+ bonus de 125%)
  • de 22h à 22h15 : prestation irrégulière (+ bonus de 150%)

En gros, comment faire un algo qui reçoit deux timestamps (début et fin de prestation) et découpe automatiquement le "durée" en différentes tranches dans le but de leur appliquer les taux (qui varient en plus selon le jour de la semaine, férié, de garde…).

Le truc embêtant est qu'il s'agit de prestations irrégulières, donc ça ne commence ni ne finit pas toujours aux mêmes heures.

Je n'ai pas d'idée qui me vient à l'esprit comme étant intéressante/optimale. Je pense détecter la "tranche" de début de la prestation, et boucler dessus jusqu'à la fin de la prestation, et additionner au passage les minutes en faisant plein de if et de else… ça me semble complètement naze !

Je travaille en JS, donc je peux utiliser Date(), mais là aussi, ça me semble tout aussi foireux…

Une idée intéressante ?

+0 -0

Salut,

Quel est la règle qui fait que l'on passe d'une prestation normale à une prestation irrégulière ?
Si je par du principe que c'est l'heure c'est assez simple.

Comme ce sont des journées il faut partir du principe que minuit c'est 0 et que 23h59 c'est 86.399 (le nombre de secondes dans une journée).
Tu fais un parcours suivant tes tranches horaires. De minuit à 8h c'est une prestation irrégulière à 150%, de 8 à 16h c'est une prestation à 100%, de 16 à 22h c'est une prestation à 125% et ainsi de suite.

Donc dans mon exemple tu à 3 tranches horaires, si à partir de la suffit de regardé si ta prestation est dans la tranche horraire, grossièrement en pseudo code:

1
2
3
4
5
6
7
8
  debut prestation = 50400 (14h)
  fin prestation = 79200 (22h)
  pour toute tranche horaire
    si debut presation <= debut tranche horaire
      salaire += (fin tranche horraire - debut prestation) * salaire à la seconde * taux tranche horaire
      debut prestation = fin tranche horaire
    fin si
  fin boucle

edit: bon la le pseudo code est clairement pas complet car il manque la gestion de la fin de la prestation, mais tu vois le principe ;)

+0 -0

Si j'ai bien compris, il suffirait juste de convertir ces deux timestamps en heure du jour, par exemple (si c'est des secondes) :

1
2
debutJournee = timestampDebut % (60 * 60 * 24)
finJournee = timestampFin % (60 * 60 * 24)

(en prenant évidemment en comptes les éventuels fuseaux horaires).

On peut ainsi déterminer les tranches de cette manière :
08h à 16h : dureeTrancheA = min(finJournee, (60 * 60 * 16)) - max(debutJournee, (60 * 60 * 08))
16h à 22h : dureeTrancheB = min(finJournee, (60 * 60 * 22)) - max(debutJournee, (60 * 60 * 16))
22h à 24h : dureeTrancheC = min(finJournee, (60 * 60 * 24)) - max(debutJournee, (60 * 60 * 22))

Donc de manière générale :
dureeTranche = min(finJournee, (60 * 60 * finTranche)) - max(debutJournee, (60 * 60 * debutTranche))

EDIT : Évidemment que si une tranche est une durée négatif, il ne faudra pas ajouter le revenu correspondant qui sera alors également négatif.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte