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

Delphi Discussion :

fonction en remplacement de MonthsBetween


Sujet :

Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut fonction en remplacement de MonthsBetween
    Bonsoir,

    Connaissez-vous une fonction qui me calcule le nombre de mois entre 2 dates d'1 autre façon que le fait MonthsBetween:

    exemple:

    MoisEntre(#05/02/2007#,#05/04/2007#)=2 (2 mois se sont totalement écoulés entre ces 2 dates)

    MoisEntre(#05/02/2007#,#04/04/2007#)=1 (1 mois et plusieurs jours se sont écoulés entre ces 2 dates, pas tout à fait 2 mois)

    Merci à vous !

    Denis
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par User
    Bonsoir,

    Connaissez-vous une fonction qui me calcule le nombre de mois entre 2 dates d'1 autre façon que le fait MonthsBetween:

    exemple:

    MoisEntre(#05/02/2007#,#05/04/2007#)=2 (2 mois se sont totalement écoulés entre ces 2 dates)

    MoisEntre(#05/02/2007#,#04/04/2007#)=1 (1 mois et plusieurs jours se sont écoulés entre ces 2 dates, pas tout à fait 2 mois)

    Merci à vous !

    Denis
    Salut!

    Qu'est-ce qu'il y a dans MonthsBetween qui ne fait pas ton affaire ?

    Merci!
    -Slimjoe

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Salut slimjoe,

    je te donne 1 extrait de l'aide sur cette fonction:

    Tous les mois n'ayant pas la même longueur,MonthsBetween renvoie une valeur approximative basée sur un mois de 30,4375 jours.Les mois non entiers ne sont pas comptabilisés.Ainsi,par exemple,MonthsBetween traduit par 0 la différence entre le 1er février et le 1er mars.
    L'exemple que je t'ai donné est assez parlant et j'ai testé la fonction MonthsBetween ne me garantit pas d'avoir:
    MoisEntre(#05/02/2007#,#05/04/2007#)=2


    Comme je le souhaiterai...

    @+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Je viens de bidouiller une fonction qui me semble plus précise (quoique probablement très naïve ). Je ne sais pas si ça répond à ce que tu as besoin (ni même si elle fonctionne vraiment, je l'ai à peine testée )

    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
       function MonthsBetween(const ANow, AThen: TDateTime): Integer;
       var
          dNow, dThen: TDateTime;
          iDNow, iMNow, iYNow, iDThen, iMThen, iYThen: word;
     
       begin
          if ANow = AThen then
          begin
             //Si les dates sont égales rien ne sert de continuer
             Result := 0;
             Exit;
          end
          else if ANow > AThen then
          begin
             //Si la date de début est plus grande que la date de fin 
             //on les inverse
             dNow := AThen;
             dThen := ANow;
          end
          else
          begin
             dNow := ANow;
             dThen := AThen;
          end;
     
          //Extraire les jours/mois/années des dates
          DecodeDate(dNow, iYNow, iMNow, iDNow);
          DecodeDate(dThen, iYThen, iMThen, iDThen);
     
          //On compte le nombre de mois total
          iMNow := iMNow + (iYNow * 12);
          iMThen := iMThen + (iYThen * 12);
     
          //On soustrait les mois de fin et de début
          Result := iMThen - iMNow;
     
          //Si le jour du mois de fin est plus petit, 
          //on n'a pas complété le mois en cours donc on le soustrait
          if iDThen < iDNow then
             Dec(Result);
       end;
    -Slimjoe

  5. #5
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    pour vous les 28 jours du mois de février sont un mois ou pas.
    tous dépend de la manière dont vous voullez compté sinon il vous sera nécéssaire de la définir vous meme

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    slimjoe:

    J'ai testé, à 1ere vue ta fonction semble ok,
    je suis vraiment une flème de pas l'avoir faite moi même..

    encore merci, pour tout,

    Je teste encore un peu:

    aityahia:

    cette nouvelle fonction me semble plus parlante pour un être humain,

    exemple: si 1 médecin souhaite faire une analyse de la glycémie chez 1 patient tous les 3 mois,

    si il a fait 1 analyse le 1er Février sa prochaine analyse sera tout naturellement le 1er Mai puis le 1 aout..etc..

    ca me semble plus proche du sens commun
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    essai IncMonth elle peut vous aider elle gère les mois de 20 30 31

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de remplacement
    Par Kiboumz dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2006, 07h36
  2. Réponses: 17
    Dernier message: 20/08/2006, 11h00
  3. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24
  4. Les fonctions de remplacement
    Par ribrok dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2006, 16h42
  5. [SQL ] Fonction pour remplacer caract. speciaux et accentué
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 3
    Dernier message: 31/01/2006, 15h16

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