albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008
-
30 oct. 2004 à 11:50
Utilisateur anonyme -
30 oct. 2004 à 21:41
Salut all.
voila,je voulais savoir si quelu'un peut me dire comment on fait pour calculer le nombre de Jour entre deux date donné? ( a savoir que j'ai deja fait une fonction qui me retourne les année bisextille et une function qui me retourne le nombre de jour d'un mois donné) ?
en cpp ou vb ou ada, bref peu importe le language, enfet il y a juste le pricipe qui m'interesse
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 30 oct. 2004 à 12:43
salut
il y a surement d'autre méthode mais j'en vois deux :
- calculer le jour de l'année des deux dates puis soustraction
- calculer la date julienne puis faire la différence
Public Function DiffJours(DatePG As Date, DatePP As Date) As Double
Dim a As Double, b As Double
a = JJ(DatePG)
b = JJ(DatePP)
DiffJours = a - b
End Function
Public Function JJ(Dates As Date)
Dim y As Long, m As Long, DDdd As Double
Dim YYYY As Long, MM As Long
Dim a As Double, b As Double
YYYY = year(dates)
mm = month(dates)
dddd = day(dates)
If MM <2 Then y YYYY - 1: m = MM + 12 Else y = YYYY: m = MM
If Dates >= 1582.1015 Then
a = y \ 100
b = 2 - a + a \ 4
End If
If y = Abs(y) Then
JJ = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5 + b
Else
JJ = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5
End If
End Function
Public Function JourAnnée(dat As Date) As Integer
Dim I As Integer
I = Year(dat)If (I Mod 400 0) Or ((I Mod 100 <> 0) And (I Mod 4 0)) Then
JourAnnée = Int((275 * Month(dat)) / 9) - Int((Month(dat) + 9) / 12) + Day(dat) - 30
Else
JourAnnée = Int((275 * Month(dat)) / 9) - (2 * Int((Month(dat) + 9) / 12)) + Day(dat) - 30
End If
End Function
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 30 oct. 2004 à 12:46
Le principe c'est de transformer chaque date en quantième par rapport au 01.01.1900 en tenant compte des années bissextiles, c'est ce que fait VB, ensuite il suffit de faire la différence pour obtenir un nombre de jours.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 30 oct. 2004 à 12:58
Bon, je vois pas le prob et pourquoi faire un super algo pour une différence entre 2 dates.
Les dates sont au format Double, donc date1-date2 (ou cdbl(date1)-cdbl(date2)) donne le même résultat à savoir le nombre de jours d'écart.
Les heures, minutes, secondes sont représentées dans la partie décimale.le 30/10/2004 38290 et le 30/12/1899 0 par exemple.
albert0
Messages postés249Date d'inscriptionmercredi 27 novembre 2002StatutMembreDernière intervention 9 août 2008 30 oct. 2004 à 18:12
bon voila j'ai trouvé
moi je voudrai savoir, si il y a aps uen meilleur solution ?
donc:
prenons 2 date
le 1 / 05 / 2005 et le 1 / 6 / 2007
donc je calcule le nombre de jours entres les 2 années
donc 2006 = 365 J
ensuite
le nombre de jours entre le mois de la premiere date et la fin de son anné
donc le 1/06 et le 31/12 = 214 J
Le nombre dejours entre le début de l'année et la date 2
donc entre 01/01 et 31/05 = 151
puis
entre la premiere date et la fin de son mois
1/05 et 31/5 = 30 jours
et etre la deuxieme date et le début de son mois
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 30 oct. 2004 à 18:22
Alors là, albert0, faut que tu demandes aux admins d'ouvrir un espace ADA ou de demander à Mr Google. Ici, c du VB et, en VB, les dates c déjà une prise de tête (comme dans pas mal de langages (même en C)) mais on dispose quand même de fonctions prédéfinies.
Mais, si tu as déjà les fonctions dont tu parles, tu devrais pouvoir t'en sortir tout seul, sinon poste les, peut-être que quelqu'un trouvera la solution.
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 30 oct. 2004 à 19:19
albert0 > ne t'énerve pas. Comme tu dis, j'en n'ai rien à foutre que tu utilses ADA ou un autre langage.
Je répète, je cherche simplement à comprendre.
Personnelllement, le VB, pour moi, c qu'une obligation proffesionnelle, je pref le C. Et l'ADA, je connais qu'en théorie.
Mais tu poses ta question sur un forum dédié à VB. Et, en VB, il existe des fonctions (comme datediff) qui donne en une ligne ce que tu prog en +sieurs lignes et +sieurs fonctions.
Bien sûr qu'on peut aussi pondre des super-algos bien compliqués mais pourquoi réinventer la roue ?
C'est pour ça que je dis que tu t'es trompé de forum.