Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

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 Compliments
Message 1 sur 4
2 770 Visites

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 sur 4
2 702 Visites

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 Compliments
Message 3 sur 4
2 682 Visites

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 Compliments
Message 4 sur 4
2 664 Visites