Salut,
J'essaye de faire (corriger plutôt) ou de trouver une fonction capable de soustraire une date à une autre dont le résultat dépendrait de l'intervalle (une période).
Par exemple :
DateDiff("d", "01/01/2006", "18/06/2006") retournerait 128
DateDiff("m", "01/01/2006", "18/06/2006") retournerait 5
Le problème est là, en fait si je veux obtenir le nombre de mois entre deux dates, j'aurais très souvent un nombre décimal. Lorsqu'on lit le script on comprend pourquoi :Le cas "m" est approximatif, DateDiff("m", "01/01/2006", "01/07/2006") retourne un d = 5.945.
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 function DateDiff(per,datelimite,datedebut) { if (datelimite != '') { jourdeb = datedebut.substring(0,2); moisdeb = datedebut.substring(3,5); anneedeb = datedebut.substring(6,10); var new_datedebut = moisdeb + "/" + jourdeb + "/" + anneedeb jourlim = datelimite.substring(0,2); moislim = datelimite.substring(3,5); anneelim = datelimite.substring(6,10); var new_datelimite = moislim + "/" + jourlim + "/" + anneelim var datelim = new Date(new_datelimite) var datedeb = new Date(new_datedebut) var d = (datelim.getTime()-datedeb.getTime())/1000 switch(per) { case "yyyy": d/=12 case "m": d*=12*7/365.25 case "ww": d/=7 case "d": d/=24 case "h": d/=60 case "n": d/=60 } //var diff = Math.ceil(d); var diff = Math.floor(d); alert(diff +"**"+ d); if (diff < 0 ) {diff = 1200 + diff} return diff; }else { return ""; } }
Plus embêtant DateDiff("m", "01/01/2006", "18/06/2006") retourne un d = 5.518, le Math.ceil me retourne donc 6 ce qui est faux.
Voyez-vous mon problème?
Connaîtriez-vous une fonction existante faisant ce que je cherche? Ou un algorithme infaillible?
Partager