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 :

Récupérer le nombre de jours d'un un mois


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 173
    Points : 83
    Points
    83
    Par défaut Récupérer le nombre de jours d'un un mois
    Bonjour à tous,
    J'aimerais savoir s'il existe une fonction me permettant de récupérer le nombre de jours d'un mois quelconque (Exemple Janvier 2012 ou Février 2013.....).
    En fait je souhaite répartir un nombre de jours quelconque sur autant de mois que cela représente avec la date exacte d'échéance.

  2. #2
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonsoir,
    La fonction DernierJourDuMois disponible dans la version 17 peut faire l'affaire...
    Sinon, à part pour le mois de Fevrier le nombre de jours d'un mois est indépendant de l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NombreJours est un tableau associatif d'entiers;
    NombreJours["JANVIER"]=31;
    NombreJours["MARS"]=31;
    ...
    NombreJours["DECEMBRE"]=31;
    Ensuite pour le mois de fevrier, il suffit de déterminer si l'année est oui on non bissextile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    an est une chaine;
    Si DateValide(an+"0229") Alors
    NombreJours["FEVRIER"]=29;
    SINON
    NombreJours["FEVRIER"]=28;
    FIN
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 173
    Points : 83
    Points
    83
    Par défaut
    Bonjour,
    Merci pour l'astuce mais je sens que la programmation sera fastidieuse. Alors je me lance immédiatement.
    N'hésitez pas à me faire d'autres suggestions s'il y a en a.
    Merci

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Fastidieuse? Il y a 16 lignes de code à faire...

    J'ai créé ma propre fonction dernierJourMois(mois est un entier, annee est un entier). Le tout m'a pris moins de 5 minutes à faire (avec la subtilité du bissextile cf. Wikipédia)


  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour

    Si je lis bien votre question, vous voulez essentiellement calculer une date d'échéance.

    Il vous suffit alors de travailler avec des variables date et d'utiliser les opérations sur les dates (addition, soustraction, ...).
    Avec une simple addition, vous devriez trouver votre bonheur.
    voir l'index de l'aide : "opérations disponibles sur les dates..."



    Quant à la fonction / procédure "dernier jour du mois" dont vous n'avez pas besoin, sauf si vous voulez calculer une échéance "fin de mois", il y a moyen de faire simple en vous reposant sur Windev pour gérer toutes les subtilités et calculer les mois de 28,29, 30 et 31 jours.
    Pas mal, non ?
    (voir le type de variable Date et les opérations)

    1. Prendre la date concernée (résultant dans le cas d'une date d’échéance, de l'addition du nombre de jours de délai à une date de départ)
    2. Incrémenter le mois d'une unité (voir propriété Mois et addition) ce qui donne le nouveau mois ci-dessous
    3. Note : si le mois était 12, Windev gèrera le changement d'année.
    4. Changer le jour de la date en 1er du mois, ce qui vous donne une date de travail intermédiaire, soit le 1er jour du mois qui suit celui dont vous voulez connaître le dernier jour.
    5. Pour retourner au dernier jour du mois précédent (celui qui vous intéresse), soustraire un jour de cette date de travail.
    6. Renvoyer le nombre de jour (propriété Jour)


    Donc, date de début + 786 jours = 17/03/2017
    03 +1 = 04
    nouvelle date intermédiaire = 17/04/2017
    changement du jour, qui est ramené au 1er : 01/04/2017
    soustraction de 1 jour = 31/03/2017
    Donc le dernier jour du mois vaut 31.

    Bon travail et bonne année !

    Hemgé

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 729
    Points : 1 648
    Points
    1 648
    Par défaut
    Bonjour,

    Ces réponses me semblent un peu compliquées.

    Nombre de jours dans un mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PROCEDURE NbJoursMois(nMois, nAnnée)
    dDate est une Date
    dDate..Année = nAnnée
    dDate..Mois = nMois
    dDate..Jour = 31	// cf. doc, 31 est automatiquement corrigé
    RENVOYER dDate..Jour
    Pour une échéance "fin de mois" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // 60 jours / fin de mois
    dDate..Jour += 60
    dDate..Jour = 31
    Si vous ne connaissez pas le type Date, des opérations sont possibles aussi sur le mois et l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dDate..Mois += 1
    dDate..Année += 1

  7. #7
    Membre confirmé Avatar de mnw.william
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2011
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 311
    Points : 459
    Points
    459
    Par défaut
    Pourquoi ne pas utiliser tout simplement la fonction

    et effectuer des soustractions pour avoir le nombre de jours ?
    Le vrai problème n’est pas de savoir si les machines pensent, mais de savoir si les hommes pensent

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 173
    Points : 83
    Points
    83
    Par défaut
    Salut,
    Merci pour vos suggestions. Mais la fonction DateVersEntier n'est pas vraiment adaptée puisque je connais le nombre de jours et c'est la date d'échéance qu'il faut déterminer à partir du nombre de jours.

    Bonne et Heureuse année 2012

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Points : 177
    Points
    177
    Par défaut
    Hey,
    en gros, tu veux ajouter un nombre de jours à un mois ?

    Exemple, ajouter 10 jours a partir du 25 janvier => 4 fevrier ?

    si c'est le cas, récupère la date et transforme la en nombre de jours ( 25 pour le 25 janvier), ajoute 10 jours (jour 35), et par un petit algo, tu tombe sur la date voulue (35 = 31 + 4 => mois X + 4 jours = 4 jours du mois X+1)

    Bonne année a toi aussi =)

  10. #10
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par xoorus Voir le message
    si c'est le cas, récupère la date et transforme la en nombre de jours ( 25 pour le 25 janvier), ajoute 10 jours (jour 35), et par un petit algo, tu tombe sur la date voulue (35 = 31 + 4 => mois X + 4 jours = 4 jours du mois X+1)
    Pourquoi partir sur des choses de ce type alors que la méthode la plus simple a été donnée plus haut par Hibernatus34 ?

    Concernant le message de mnw.william il existe la fonction DateDifférence qui retourne le nombre de jours entre deux dates

Discussions similaires

  1. Récupérer le nombre de jours d'un mois ?
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 07/10/2017, 12h55
  2. [datetime] obtenir le nombre de jour maximal d'un mois
    Par anthyme dans le forum Général Python
    Réponses: 8
    Dernier message: 11/04/2008, 10h16
  3. Réponses: 4
    Dernier message: 06/02/2008, 13h37
  4. Réponses: 3
    Dernier message: 28/10/2006, 15h47
  5. Excel : Nombre de jours ouvrés dans un mois
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2005, 10h09

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