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

VB 6 et antérieur Discussion :

DateDiff et années bissextiles


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut DateDiff et années bissextiles
    Bonsoir je me demande si la fonction DateDiff gère les années bissextiles ou bien est-ce que je suis obligé de passer par IsLeapYear ? je cherche mais c'est pas clair du tout.
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Bien sûr;
    Voici un petit exemple qui illustre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Load()
       Dim Dt1 As Date, Dt2 As Date  ' Déclare les variables.
        Dim Msg$
        Me.AutoRedraw = True
        Dt1 = "01/01/2008"
        Dt2 = "01/01/2009"
        Msg = "Jours entre " & Dt1 & " et " & Dt2 & " : " & DateDiff("d", Dt1, Dt2)
     
        Dt1 = "01/01/2007" 'InputBox("Entrez une date")
        Dt2 = "01/01/2008" 'InputBox("Entrez une autre date")
        Msg = Msg & vbCrLf & "Jours entre " & Dt1 & " et " & Dt2 & " : " & DateDiff("d", Dt1, Dt2)
        MsgBox Msg
    End Sub
    Rq : IsLeapYear n'est pas géré par VB6.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Merci donc tu confirmes bien que dateDiff gère les années bissextiles je posais la question car sur aucun tutoriel c'était écrit noir sur blanc alors c'est pour ça j'étais pas sur. Enfin j'ai peut être pas trouvé les bons

    En fait j'ai écrit un code mais mon problème c'est qu'il ne gère pas les années bissextiles et les mois à 30 et 31 sinon il fonctionne

    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
     
    Public Function CalculAncienneté(ByVal d As Date)
     
    Dim NbrA As String, NbrM As String, NbrJ As String
    Dim NbrH As Single, NbrMin As Single, NbrS As Single
    Dim difference As Single
    Dim TotalJours As Integer
     
    TotalJours = Date - d
    NbrA = TotalJours \ 365
    TotalJours = TotalJours Mod 365
    NbrM = TotalJours \ 30
    NbrJ = TotalJours Mod 30
    If NbrJ >= 0 And NbrM >= 0 And NbrA >= 0 And TotalJours <> 0 Then
    CalculAncienneté = NbrA & " ans, " & NbrM & " mois et " & NbrJ & " jours."
    ElseIf TotalJours = 0 Or NbrJ = -1 Then
    NbrJ = d
     'renvoi la différence de temps en secondes
    difference = DateDiff("s", Now, NbrJ)
    NbrH = CInt((((difference Mod 86400) \ 3600)))
    NbrMin = CInt(((difference Mod 86400) Mod 3600) \ 60)
    NbrS = CInt((((difference Mod 86400) Mod 3600) Mod 60))
    CalculAncienneté = Abs(NbrH) & ":" & Abs(NbrMin) & " et " & Abs(NbrS) & " secondes."
     
    End If
    End Function
    Si vous avez une astuce ?

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    Nous ne pourrons te répondre réellement valablement que lorsque tu nous auras défini avec précision ce que doit être ta valable CalculAncienneté.
    Deux approches sont en effet possibles :
    1) approche "durée temporelle" :
    et il ne peut alors s'agir que d'une durée exprimée en jours, heures, minutes et secondes (toute notion d'années et mois est calendaire et n'a alors plus rien nà voir)
    2) approche "calendaire" (comme pour un âge)
    et ce n'est que dans ce cas qu'intervient (du fait notamment des années bissextiles) la notion d'année ou/et celle de mois.
    Précise-npous ce point et tu auras ta réponse précise.

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Oui c'est le cas numéro 2 c'est à dire calendaire comme pour l'âge.

    Pour être plus précise je récupère en paramètre une date et cette date je la compare à la date système. Mon résultat affiche le nombre d'années, de mois et de jours, là c'est un problème car ne tient compte seulement de 30 jours .
    Après si la comparaison des deux dates est inférieur à 1 jour alors je calcul le nombre d'heures, minutes, et secondes et là pas de problème.

    Sinon je pense avoir trouvé un truc pas mal pour les années :

    ((joursysteme - jourNaissance + ( moisSysteme - moisNaissance ) * 365.25/12 +(anneeSysteme - anneeNaissance) *365.25)/365.25)

    Car la durée moyenne d'une année, années bissextiles comprises est de 365.25 jours.

    Par contre ça résoud pas le probleme des mois 30 et 31.

  6. #6
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    C'est encore moi j'ai trouvé autre chose aui a l'air bien

    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
     
     Function ConvertisseurAnnMoisJour(ByVal maDureeJour As Integer) As Integer
            Dim nbAns As Integer
            Dim nbMois As Integer
            Dim nbJours As Integer
     
            '\, opérateur : Effectue la division de deux nombres et retourne le résultat sous forme d'entier.
            'Mod, opérateur (Visual Basic) : Effectue la division de deux nombres et retourne seulement le reste.
            nbAns = maDureeJour \ 365.25
            nbMois = (maDureeJour Mod 365.25) \ 30.4375
            nbJours = (maDureeJour Mod 365.25) Mod 30.4375
     
            'Pour tester, à adapter bien sûr.
            Return MsgBox(nbAns & " années " & nbMois & " mois " & nbJours & " jours ")
        End Function
    Exemple: 5376 me donne 14 ans 8 mois et 19 jours, l'âge de ta personne.
    J'attends voir ce que vous en pensez et pendant ce temps je le teste.

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

Discussions similaires

  1. Problème DATEDIFF en année
    Par Mengallor dans le forum Développement
    Réponses: 7
    Dernier message: 06/11/2009, 09h55
  2. [Dates] Liste déroulante date et années bissextiles
    Par Jiraiya42 dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2007, 00h04
  3. test année bissextile
    Par franfr57 dans le forum ASP
    Réponses: 1
    Dernier message: 07/05/2007, 13h28
  4. Année bissextile [9i]
    Par kalyparker dans le forum Oracle
    Réponses: 8
    Dernier message: 09/02/2007, 22h48
  5. [VBA-E] Graphique superposé avec année bissextile
    Par popo68 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2007, 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