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

QlikView Discussion :

Fonction age entre deux dates


Sujet :

QlikView

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 226
    Points : 78
    Points
    78
    Par défaut Fonction age entre deux dates
    Bonjour,

    La fonction age permet de calculer le nombre d'année entre deux dates, y-a-t-il un equivalent pour calculer le nombre de mois et/ou jour?

    Cordialement.

  2. #2
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 651
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 651
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour compter la différence en jours, il suffit de faire une soustraction.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    Je rencontre le même souci , mais je souhaite obtenir le nombre de mois.
    Ma date début ainsi que celle de la fin est au format 'DD/MM/YYYY'.

    par exemple si je fais début :01/01/2012
    fin: 29/02/2012

    29/02/2012 - 01/01/2012 = 59 jours

    Ce que je souhaite c'est avoir 2 qui correspond au nombre de mois.

    De plus j'ai une question si je tombe sur 45 jours , aurais 1 ou 1.5 ?

    Autre question, si le nombre de mois est à intervalle de deux année
    Par exemple :
    début 11/12/2013 et fin 01/03/2014 normalement on à 79 jours sauf erreur soit 2 mois et 20 jous

    Merci pour votre aide.

  4. #4
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 651
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 651
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par mano_bi Voir le message
    29/02/2012 - 01/01/2012 = 59 jours

    Ce que je souhaite c'est avoir 2 qui correspond au nombre de mois.
    En divisant par 30 et en prenant l'arrondi suppérieur ?


    Citation Envoyé par mano_bi Voir le message
    De plus j'ai une question si je tombe sur 45 jours , aurais 1 ou 1.5 ?
    Tout dépend de ce que vous souhaitez avoir...
    Si vous voulez avoir "1", il suffit d'arrondir à l'entier inférieur (floor).
    Si vous voulez avoir "1.5", il faut arrondir avec une précision de 0.5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ceil((date#('29/02/2012', 'DD/MM/YYYY') - date#('01/01/2012', 'DD/MM/YYYY')) / 30, 0.5)
    --> 2.0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ceil((date#('15/02/2012', 'DD/MM/YYYY') - date#('01/01/2012', 'DD/MM/YYYY')) / 30, 0.5)
    --> 1.5

  5. #5
    Membre du Club Avatar de xanav
    Inscrit en
    Mars 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 55
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Pour avoir ce que tu veux, il faut utiliser une formule avec les fonction Month et Year.

    Par exemple, la fonction ci-dessous te donne le nombre de mois entre DateFin et DateDeb.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(12 - Month(DateDeb) + 1) + (12 - Month(DateFin)) * (Year(DateFin) - Year(DateDeb) - 1) + Month(DateFin) * (Year(DateFin) - Year(DateDeb))
    Attention, cet formule ne fonctionne que si dateDeb est inférieure à DateFin.

    Après tout dépend ce que tu veux vraiment. Ici, la formule proposée te donnera toujours un nombre entier de mois et comptera le mois de début et le mois de fin. Donc si, par exemple, tu as 01/01/2015 et 02/01/2015, ça renverra 1. Après, tu peux t'en inspirer et adapter la formule pour avoir ce que tu veux. Mais ça, c'est juste des maths, on va pas le faire à ta place...

  6. #6
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 651
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 651
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par mano_bi Voir le message
    Par exemple :
    début 11/12/2013 et fin 01/03/2014 normalement on à 79 jours sauf erreur soit 2 mois et 20 jous
    Si l'objectif est de dire un nombre de mois + un nombre de jours, on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =ceil((floor(monthstart(dateFin)) - ceil(monthend(dateDebut))) / 365.25 * 12) & ' mois et ' &
    ((dateFin - floor(monthstart(dateFin))) + (ceil(monthend(dateDebut)) - dateDebut)) & ' jours'
    - on compte d'abord le nombre de mois complets (nombre de mois entre 01/01/2013 et 01/03/2014)
    - on rajoute le nombre de jours qu'il y a entre le 11/12/2013 et le début du mois suivant + le nombre de jours qu'il y a entre le 01/03/2014 et le mois précédent

    Inconvénient : entre le "02/11/2013" et le "29/03/2014", ça annoncera "2 mois et 58 jours".
    D'un autre coté, on ne sait pas combien de mois + jours représentent ces "58 jours" étant donné que le nombre de jours dépend du mois dans lequel on est...

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    En divisant par 30 et en prenant l'arrondi suppérieur ?
    Pourquoi faire compliqué quand il y à simple. J'ai juste /30

    Merci Phunky BOB.

    Je connaissais pas la fonction "ceil" .

    Une toute dernière question sur ce sujet, car je vois tous les cas de figure.
    admettons que début : 01/01/2015 et fin 30/11/2015 soit 10 mois.
    Dans ma sélection je choisis 201508 , ce qui me donnera 10 - 8 = 2 mois (sachant que 08-2015 est au format 'YYYYMM' donc 201508)
    si je prend juillet j'ai 10 - 7 soit 3 mois.

    je peux refaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ceil((date#('29/02/2012', 'DD/MM/YYYY') - date#('01/01/2012', 'DD/MM/YYYY')) / 30, 0.5) - Date(Date#(Annee_Mois,'YYYYMM'),'DD/MM/YYYY')
    Merci

  8. #8
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 651
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 651
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Je ne comprends pas la question, mais vous pouvez utiliser les fonctions "monthstart" et "monthend" pour arrondir vos dates au premier jour du mois ou au dernier jour du mois.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2013
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 112
    Points : 54
    Points
    54
    Par défaut
    Tu peux aussi te créer ta propre fonction MonthDiff, en créant une variable que tu utiliseras ensuite comme n'importe quelle fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET MonthDiff = Num(((year($2) * 12) + month($2)) - (((year($1) * 12) + month($1))) + 1) ;

    Permet de créer l’équivalent d'une fonction pour compter le nombre de mois entre 2 dates: $(MonthDiff(StartDate, EndDate))

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    J'essai de reformuler , désole.

    En fonction de la période sélectionner je veux connaitre le nombre de mois qu'il reste.

    Je vous un prend un exemple :

    J'ai un locataire qui occupe un appartement. Le bail est conclus du (date début)01/01/2015 au (date fin)31/11/2015 soit 11 mois.
    Quand je sélectionne le mois d’Août (format YYYYMM) il me fait la différence du nombre de mois jusqu'au 31/11/2015 .
    Dans le cas ou je sélectionne Août , j'aurai 3 qui s'affichera soit 11 - 8 = 3 .
    Dans le cas ou je sélectionne Juin , j'aurai 5 qui s'affichera soit 11 - 6 = 5 .

    J'avais penser à la date système , mais si je choisis Juin 2015 par exemple , ça marchera pas.
    D'autant plus que je peux avoir une année à cheval .

    Un peu comme si on se balade à l'aide d'un curseur et qu'il donne la valeur en fonction de la sélection.

    Je sais pas si c'est assez clair.

    Merci.

  11. #11
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 651
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 651
    Points : 2 531
    Points
    2 531
    Billets dans le blog
    6
    Par défaut
    Le format de la date importe peu, car une date est un nombre, affiché sous un format texte. Les opérations faites sur les dates se base sur le numérique.

    Si votre dimension n'est pas une date, mais juste une chaine de caractère, il faut alors la convertir avec la fonction "date#()".

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    Ok,

    Merci beaucoup .

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Davidb_ Voir le message
    Tu peux aussi te créer ta propre fonction MonthDiff, en créant une variable que tu utiliseras ensuite comme n'importe quelle fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET MonthDiff = Num(((year($2) * 12) + month($2)) - (((year($1) * 12) + month($1))) + 1) ;

    Permet de créer l’équivalent d'une fonction pour compter le nombre de mois entre 2 dates: $(MonthDiff(StartDate, EndDate))
    ça m'oblige à aller tapé dans le script.
    Si je peu faire via des expressions c'est mieux.

    Merci pour l'astuce.

  14. #14
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, est-ce transposable ?
    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
    Option Explicit
     
    Function DiffDateAMJ(DateDebut As Date, DateFin As Date) As String
    Dim NbAns As Long, NbMois As Long, NbJours As Long
    Dim Tmp As Date
        Tmp = DateSerial(Year(DateFin), Month(DateDebut), Day(DateDebut))
        NbAns = Year(DateFin) - Year(DateDebut) + (Tmp > DateFin)
        NbMois = Month(DateFin) - Month(DateDebut) - (12 * (Tmp > DateFin))
        NbJours = Day(DateFin) - Day(DateDebut)
        If NbJours < 0 Then
            NbMois = NbMois - 1
            NbJours = Day(DateSerial(Year(DateFin), Month(DateFin), 0)) + NbJours
        End If
        DiffDateAMJ = NbAns & "a " & NbMois & "m " & NbJours & "j"
    End Function
    Après c'est toujours une histoire de +1 ou pas pour le nombre de jours.
    Images attachées Images attachées  

Discussions similaires

  1. Faire un select d'age entre deux dates
    Par linuxien_tun dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2014, 22h22
  2. Réponses: 2
    Dernier message: 22/04/2013, 22h51
  3. Fonction Calcul automatique de nombre de jours ouvrable entre deux dates
    Par KiMbOoO dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/04/2011, 10h23
  4. [PHP 5.2] Fonction qui retourne le nombre de jours compris entre deux dates
    Par zemzoum89 dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 21h27
  5. fonction table pour récupérer la liste des jours entre deux dates
    Par elmoul7ak dans le forum Développement
    Réponses: 2
    Dernier message: 01/05/2010, 14h22

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