IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Calcul de jours entre deux dates


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 734
    Points : 637
    Points
    637
    Par défaut Calcul de jours entre deux dates
    Bonjour,

    j'ai un petit problème à résoudre qui me bloque ...

    J'ai une table avec des périodes de vacances avec deux dates : Vacances_debut, Vacances_fin ( type date )

    Dans une fonction, je dois calculer le nombre de jour entre deux dates : date_1, date_2 , jusque là c'est simple, mais le soucis c'est que je dois supprimer les jours de vacances :

    exemple :

    Date_1 = 01/01/2014
    Date_2 = 15/01/2014

    Différence = 13 , mais si une période de vacances est inscrite du 24/12/2013 au 07/01/2014 , je devrais déduire les dates de ces vacances

    Différence , entre le 07/01/2014 et 15/01/2014 ==> 7

    Idem si les vacances sont inclues dans la période :

    Date_1 = 10/12/2013
    Date_2 = 15/01/2014

    Différence = Date_2 - Date_1 - ( 07/01/2014 - 24/12/2014 )


    je ne vois pas si je dois partir sur une fonction ou du SQL ...


    Une idée de départ ?

    @micalement

    Olivier

  2. #2
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 600
    Points
    600
    Par défaut
    Bonjour,

    Ah les dates c'est souvent à se tirer les cheveux.

    Ca m’intéresse donc je vais essayer de t'aider.

    Donc déjà pour plus de faciliter je remplace les dates par des numéros, c'est plus facile pour essayer de trouver un semblant d'algorithme.

    Au final, j'ai pensé à faire ca:

    Tu as les deux dates : 20 et 35

    La premiere chose à faire c'est déjà de savoir si une des deux dates se trouvent dans l'intervalle.

    situation 1:
    tu as les deux dates de vacances : 31 et 40
    Si seulement la premiere, alors 35 - 31

    situation 2:
    date de vacances : 15 et 30
    si seulement la seconde, alors 30 - 20

    situation 3:
    date de vacances : 25 et 30
    les deux : (25 - 20) + (35 - 30)

    si aucune bon la ca va

    Bon j’espère que tu as un peu compris sur quoi moi je me dirigerai. C'est un peu brouillon mais bon pour trouver des algo, c'est souvent comme ca

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Points : 30
    Points
    30
    Par défaut
    Salut,

    Vous pouvez aussi rajouter la gestion des jours fériés

    Sinon moi dans ton cas je ferai un truc dans ce style:

    Je créé un tableau de structures avec toutes tes périodes de vacances, début et fin.
    Je crée un autre tableau à une dimension avec pour contenu chaque jour de ta période que tu veux analyser.

    Tu boucle sur le tableau de la période.
    Dans cette boucle tu appelles une fonction qui va parcourir ton tableau de périodes de vacances et te renvoyer vrai si ta date est dans une période ou faux dans le cas contraire.

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 188
    Points
    188
    Par défaut
    Bonjour Olivier,

    Fonction ou SQL, je n'en sais rien mais si tu veux partir sur une fonction, de mon côté je bouclerais sur la période et testerais chaque jour en appelant une fonction de contrôle. Cette fonction testerait un tableau de date contenant tous tes jours de vacances et renverrait faux dans le cas où la date testée est présente dans le tableau. Naturellement c'est simplifié car peut-être veux-tu aussi exclure les samedis, dimanches et autres jours fériés.

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 734
    Points : 637
    Points
    637
    Par défaut
    Bonjour,

    merci pour toutes vos réponses, je vais continuer a m'arracher mes derniers cheveux ...

    Je pensais pouvoir me passer des boucles , avec ce que vous me dites , je pense devoir passer par là quand même.

    En tout cas dès que j'ai une solution viable, je la pousse par ici , boucle ou pas


    Bonne journée

    Olivier

  6. #6
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 734
    Points : 637
    Points
    637
    Par défaut
    Hello,

    voila le code que j'ai pondu pour cette histoire de déduire les périodes de vacances.

    La fonction prend en paramètre la date de début et de fin de la période à tester et retourne le nombre de jours de vacances à déduire de la période ( dans ce cas pour calculer des amendes de retard)

    Je n'ai pas passé par des boucles, mais des SI imbriqués , cela me semblait plus "élégant" de passer par 3 "SI" que de boucler sur tous les jours.

    Je récupère les périodes de vacances concernées par une requête SQL depuis la table ( oups ... pardon ... du fichier ) des vacances et je boucle dessus.

    C'est assez rapide car uniquement des conditions et sur les vacances qui entrent en compte dans le calcul.

    Bien entendu je suis ouvert a tous commentaires bon et mauvais


    Excellent week-end


    Olivier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    // Résumé : <indiquez ici ce que fait la procédure>
    PROCEDURE Deduction_vacances(dDateDebut,dDateFin)
     
    nDiff est un entier
    nCpt, nTotal  est un entier 
     
    rs est une Source de Données
    sSQL est une chaîne
     
    sSQL = [
    	SELECT
    	Vacances.Txt_vacances,
    	Vacances.Debut_vacances,
    	Vacances.Fin_vacances
    	FROM 	Vacances
    	WHERE 
    	'%1' BETWEEN Debut_vacances AND Fin_vacances
    	OR 
    	'%2' BETWEEN Debut_vacances AND Fin_vacances
    	OR 
    	Debut_vacances BETWEEN '%1' AND '%2'
     
    ]
     
    sSQL = ChaîneConstruit(sSQL,dDateDebut,dDateFin)
     
    SI PAS HExécuteRequêteSQL(rs,hRequêteDéfaut,sSQL) ALORS
    	Erreur(HErreurInfo())
    	RENVOYER 0
    FIN
     
    SI HNbRec(rs) > 0 ALORS 
    	//-- j'ai la liste des vacances qui tombent dans la période --
    	POUR TOUS rs 
     
    		SI rs.Debut_vacances < dDateDebut ET rs.fin_vacances < dDateFin  ALORS
    			// |<------ vacances-----|debut|------>| -------- | fin |  
    			nCpt = DateDifférence(dDateDebut,rs.Fin_vacances)
    		SINON
    			SI rs.Debut_vacances > dDateDebut ET rs.fin_vacances > dDateFin  ALORS
    				// |debut|-----------|< ------ vacances ------|fin|--------->|
    				nCpt = DateDifférence(rs.Debut_Vacances, dDateFin)
    			SINON
    				SI rs.debut_vacances > dDateDebut ET rs.fin_vacances  < dDateFin  ALORS
    					//|debut|----|<---- vacances ----->|-----|fin|
    					nCpt = DateDifférence(rs.Debut_Vacances, rs.fin_vacances)
    				SINON 
    					// |<-----------vacances -----|debut| ---------|fin| ---------->|
    					nCpt =  DateDifférence(dDateDebut,dDateFin)					
    				FIN
    			FIN
    		FIN
    		nTotal += nCpt 
    	FIN
    FIN 
     
     
    RENVOYER nTotal

Discussions similaires

  1. [AC-2010] Calcul des jours entre deux dates
    Par maranatha-1975 dans le forum Access
    Réponses: 2
    Dernier message: 14/01/2014, 13h53
  2. calcul nombre de jours entre deux dates
    Par charlene44 dans le forum Langage
    Réponses: 7
    Dernier message: 21/08/2012, 14h06
  3. Calculer les jours entre deux dates
    Par Daniela dans le forum SQL
    Réponses: 4
    Dernier message: 09/10/2008, 17h01
  4. [Date] calcul de jours entre deux dates
    Par skyangel dans le forum Général Java
    Réponses: 5
    Dernier message: 05/03/2008, 15h59
  5. [Dates] Calculer différence en jours entre deux dates
    Par looping2b2a dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2006, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo