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.
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.
Bien sûr;
Voici un petit exemple qui illustre ça :
Rq : IsLeapYear n'est pas géré par VB6.
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
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
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
Si vous avez une astuce ?
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
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.
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.
C'est encore moi j'ai trouvé autre chose aui a l'air bien
Exemple: 5376 me donne 14 ans 8 mois et 19 jours, l'âge de ta personne.
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
J'attends voir ce que vous en pensez et pendant ce temps je le teste.
Partager