Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

soustraire 2 date en enlevant les week end

Bonjour, Et merci pour votre aide.

Je voudrais soustraire 2 dates pour compter le Nb de jours ouvrés.

Soustraire 2 dates, jusque la pas de soucis, par contre enlever tous les week end s'il y en a, c'est la que je bloque.

 

Merci d'avance si vous avez une idée à me proposer.

 

 

0 Kudos
Message 1 of 4
(2,821 Views)

Il faut y aller un jour à la fois. Part de la date la plus ancienne, vérifie si c'est un jour de semaine (ajoute 1 si c'est le cas) puis ajoute  86400 (1 journée) au timestamp de la date de départ pour passer à la journée suivante. Continue ainsi jusqu'à la date soit égale à la date finale.

 

Pour vérifier si c'est un jour de semaine utilise le vi Seconds To Date/Time.vi et fait un unbundle à la sortie pour récupérer l'information "day of week" (1 correspond au dimanche et 7 au samedi).

 

Day of Week.png

 

Ben64

Message 2 of 4
(2,753 Views)

Bonjour Ben64,

Merci pour ta réponse, je comprends mieux,

Voici ce que j'ai fait en suivant tes explications.

Peut être y a t-il une meilleur solution? En tous cas ça fonctionne  MERCI ENCORE !!

 

Soustraire 2 dates et enlever les week end.png

0 Kudos
Message 3 of 4
(2,733 Views)

Ce n'est pas mal mais j'aurais les commentaires suivant sur ton code. En considérant que les 2 jours première date et deuxième date sont considérées comme des journées complètes:

 

L'arrêt conditionnel de la boucle FOR est inutile puisque tu utilises le terminal N. Utiliser l'égalité sur les timestamps 1ere et 2ieme date est à éviter car même si éventuellement les dates sont les mêmes si les heures, minutes, secondes, fractions de seconde sont différentes il n'y aura jamais égalité. Même si on utilise >= il y aura une incertitude de +/- 1 journée selon que l'heure de la seconde date est > ou < à celle de la première date.

 

Dans ton code il a également une incertitude sur le nombre de jours total à cause de la conversion de la valeur DBL en I32 qui sert à indexer la boucle FOR (arrondie à la valeur supérieure ou non selon que la partie décimale est >= 0.5, encore une fois ceci est est lié aux heures utilisées pour date 1 et date 2). Il serait préférable d'utiliser la fonction Quotient & Reminder.

 

Ssi les heures sont toujours égales à la même constante pour les deux dates alors ton code fonctionnera bien.

 

Voici ma solution:

La structure Case utilise comme autre cas: "1, 7, Default" où je ne fait que passer le fil du nombre de jours ouvrés.

 

Nbre jours ouvrés.png

 

Ben64

0 Kudos
Message 4 of 4
(2,715 Views)