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

Discussion :

[QDate] Nombre de mois entre deux dates ?

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 81
    Points
    81
    Par défaut [QDate] Nombre de mois entre deux dates ?
    Bonjour,

    Dans la documentation, il est possible de trouver le nombre de jours entre deux dates
    qint64 QDate::daysTo(const QDate &d) const

    Mais, je ne trouve pas la fonction qui permet de trouver le nombre de mois entre deux dates.
    Rappel, un nombre de mois n'est pas un nombre de jours divisé par 30 ...

    NB : en VB.net, il existe la fonction DateDiff("m", date1, date2), avec "m" pour mois.

    En Qt, comment trouver le nombre de mois entre deux dates ?

    Pourriez-vous m'aider ?
    Merci de me mettre un quand mon message est pertinent

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Il n'y a pas de fonction pour faire ça à ma connaissance. Mais comment comptes-tu la différence ? Uniquement les mois pleins, en incluant les mois de début et fin (même incomplets) ?
    J'ai vu qu'il existe un code non officiel QTimeSpan qui n'est plus à jour, sinon développer le calcul toi même sera probablement le plus simple (en fonction de comment tu calcules la différence).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 81
    Points
    81
    Par défaut monthsTo() code perso
    Merci à ymoreau, je l'ai donc codé

    Dans la documentation, il est possible de trouver le nombre de jours à ajouter pour atteindre la seconde date
    qint64 QDate::daysTo(const QDate &d) const

    Mais, je ne trouve pas la fonction "monthsTo()" qui me permettrait de trouver le nombre de mois à ajouter pour atteindre la seconde date

    Voici mon code (à vérifier, je n'ai fait que quelques tests) :

    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
    void Dialog::on_btn_calculer_clicked(){
    
        // recupération des données
        int mois1=ui->cbo_mois1->currentIndex()+1;// entre 1 et 12
        int mois2=ui->cbo_mois2->currentIndex()+1;// entre 1 et 12
        QString tmp;
        tmp=ui->cbo_annee1->currentText();
        int annee1=tmp.toInt();
        tmp=ui->cbo_annee2->currentText();
        int annee2=tmp.toInt();
        int nb_mois=0;
    
        // calcul
        nb_mois=(annee2-annee1-1)*12;
        nb_mois+=(12-mois1);
        nb_mois+=mois2;
    
        // le nombre de mois peut être négatif
        // =0 si le mois et l'année sont égaux
    
        ui->lbl_reponse->setText(QString::number(nb_mois));
    
    }
    Voici le code l'interface graphique pour faire des tests

    ----------------------------------
    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "dialog.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Dialog w;
        w.show();
     
        return a.exec();
    }
    -----------------------------------
    dialog.h

    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
    #ifndef DIALOG_H
    #define DIALOG_H
     
    #include <QDialog>
     
    namespace Ui {
    class Dialog;
    }
     
    class Dialog : public QDialog
    {
        Q_OBJECT
     
    public:
        explicit Dialog(QWidget *parent = 0);
        ~Dialog();
     
    private:
        Ui::Dialog *ui;
     
     
    private slots:
        void on_btn_calculer_clicked();
    };
     
    #endif // DIALOG_H
    -----------------------------------
    dialog.cpp

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #include "dialog.h"
    #include "ui_dialog.h"
    #include <QString>
     
    Dialog::Dialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog)
    {
        ui->setupUi(this);
     
        ui->cbo_mois1->addItem("Janvier");
        ui->cbo_mois1->addItem("Février");
        ui->cbo_mois1->addItem("Mars");
        ui->cbo_mois1->addItem("Avril");
        ui->cbo_mois1->addItem("Mai");
        ui->cbo_mois1->addItem("Juin");
        ui->cbo_mois1->addItem("Juillet");
        ui->cbo_mois1->addItem("Août");
        ui->cbo_mois1->addItem("Septembre");
        ui->cbo_mois1->addItem("Octobre");
        ui->cbo_mois1->addItem("Novembre");
        ui->cbo_mois1->addItem("Décembre");
     
        ui->cbo_mois2->addItem("Janvier");
        ui->cbo_mois2->addItem("Février");
        ui->cbo_mois2->addItem("Mars");
        ui->cbo_mois2->addItem("Avril");
        ui->cbo_mois2->addItem("Mai");
        ui->cbo_mois2->addItem("Juin");
        ui->cbo_mois2->addItem("Juillet");
        ui->cbo_mois2->addItem("Août");
        ui->cbo_mois2->addItem("Septembre");
        ui->cbo_mois2->addItem("Octobre");
        ui->cbo_mois2->addItem("Novembre");
        ui->cbo_mois2->addItem("Décembre");
     
        for(int i=1987;i<2027;i++){
            ui->cbo_annee1->addItem(QString::number(i));
            ui->cbo_annee2->addItem(QString::number(i));
        }
     
    }
     
    Dialog::~Dialog()
    {
        delete ui;
    }
     
    void Dialog::on_btn_calculer_clicked(){
     
        // recupération des données
        int mois1=ui->cbo_mois1->currentIndex()+1;// entre 1 et 12
        int mois2=ui->cbo_mois2->currentIndex()+1;// entre 1 et 12
        QString tmp;
        tmp=ui->cbo_annee1->currentText();
        int annee1=tmp.toInt();
        tmp=ui->cbo_annee2->currentText();
        int annee2=tmp.toInt();
        int nb_mois=0;
     
        // calcul
        nb_mois=(annee2-annee1-1)*12;
        nb_mois+=(12-mois1);
        nb_mois+=mois2;
     
        // le nombre de mois peut être négatif
        // =0 si le mois et l'année sont égaux
     
        ui->lbl_reponse->setText(QString::number(nb_mois));
     
    }
    ----------------------------
    dialog.ui

    Code xml : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>Dialog</class>
     <widget class="QDialog" name="Dialog">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>547</width>
        <height>357</height>
       </rect>
      </property>
      <property name="font">
       <font>
        <pointsize>20</pointsize>
       </font>
      </property>
      <property name="windowTitle">
       <string>MonthsTo</string>
      </property>
      <widget class="QLabel" name="label">
       <property name="geometry">
        <rect>
         <x>40</x>
         <y>20</y>
         <width>491</width>
         <height>41</height>
        </rect>
       </property>
       <property name="text">
        <string>Nombre de mois à ajouter</string>
       </property>
      </widget>
      <widget class="QLabel" name="label_2">
       <property name="geometry">
        <rect>
         <x>40</x>
         <y>80</y>
         <width>471</width>
         <height>41</height>
        </rect>
       </property>
       <property name="text">
        <string>pour atteindre la seconde date</string>
       </property>
      </widget>
      <widget class="QComboBox" name="cbo_mois1">
       <property name="geometry">
        <rect>
         <x>40</x>
         <y>150</y>
         <width>311</width>
         <height>41</height>
        </rect>
       </property>
      </widget>
      <widget class="QComboBox" name="cbo_annee1">
       <property name="geometry">
        <rect>
         <x>390</x>
         <y>150</y>
         <width>121</width>
         <height>41</height>
        </rect>
       </property>
      </widget>
      <widget class="QComboBox" name="cbo_mois2">
       <property name="geometry">
        <rect>
         <x>40</x>
         <y>210</y>
         <width>311</width>
         <height>41</height>
        </rect>
       </property>
      </widget>
      <widget class="QComboBox" name="cbo_annee2">
       <property name="geometry">
        <rect>
         <x>390</x>
         <y>210</y>
         <width>121</width>
         <height>41</height>
        </rect>
       </property>
      </widget>
      <widget class="QPushButton" name="btn_calculer">
       <property name="geometry">
        <rect>
         <x>40</x>
         <y>280</y>
         <width>311</width>
         <height>51</height>
        </rect>
       </property>
       <property name="text">
        <string>Calculer</string>
       </property>
      </widget>
      <widget class="QLabel" name="lbl_reponse">
       <property name="geometry">
        <rect>
         <x>390</x>
         <y>280</y>
         <width>111</width>
         <height>51</height>
        </rect>
       </property>
       <property name="text">
        <string/>
       </property>
      </widget>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>

    ------------------

    Merci de signaler un éventuel bug.
    Merci de me mettre un quand mon message est pertinent

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 81
    Points
    81
    Par défaut monthsTo() code validé
    J'ai (re)testé le code un peu plus intensément.
    Pour moi, le code est bon.
    Je marque ce problème comme "résolu".

    Merci à dourouc05. La prochaine fois, je placerai la balise CODE, ce qui évitera de voir apparaître des smileys dans le code ...
    Merci de me mettre un quand mon message est pertinent

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

Discussions similaires

  1. [SQL] Calcul du nombre de mois entre deux dates
    Par Lolie11 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2009, 11h46
  2. Récupérer le nombre de mois entre deux dates
    Par winow dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/08/2008, 23h17
  3. Différence en nombre de mois entre deux dates
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/05/2007, 12h26
  4. [Dates] nombre de mois entre deux dates
    Par Mat_DZ dans le forum Langage
    Réponses: 14
    Dernier message: 23/11/2006, 16h10
  5. Nombre de mois entre deux dates
    Par boulaxx dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 14/09/2006, 15h22

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