2008-11-06 7 views
2

J'ai une application où l'utilisateur sélectionne les dates d'une première déclaration et une dernière déclaration. Exemple, première déclaration = 1/1/08, dernière déclaration = 12/1/08, devrait égaler 12 déclarations.Calcul des mois

Cependant, lorsque vous utilisez le code suivant, le résultat est 11:

numPayments = DateDiff(DateInterval.Month, CDate(.FeeStartDate), CDate(.FeeEndDate)) 

Y at-il une autre façon de calculer, ou dois-je être coincé avec l'ajout de 1 au résultat?

Répondre

2

Oui, vous auriez toujours ajouter une si vous pouvez être en mesure d'ajouter un à la date de fin ou soustraire un de la date de début pour obtenir également cet effet. Considérez le cas où les dates de début et de fin sont les mêmes. Leur différence est de 0, mais vous voulez toujours afficher une seule déclaration pour noter un cas étrange.

5

Ajoutez 1, comme vous écrivez. ;)

La différence entre 1/1/2008 et 01/12/2008 est de 11 mois. Pas de changement ça. ;)

2

Eh bien, le nombre de mois entre le 1er janvier et le 1er décembre est de 11 ... ce que vous cherchez est la différence des mois +1. Il suffit donc d'en ajouter un :)

2

En outre, la fonction DateDiff que vous utilisez est une retenue VB6. Mieux vaut l'exprimer comme ceci:

numPayments = (Date.Parse(.FeeEndDate) - Date.Parse(.FeeStartDate)).TotalMonths + 1 
0

Vous pourriez essayer celui-ci. J'espère que c'est très utile.

Dim myDate As Date 
Dim dateNow As Date 
Dim nextMonth As Date 

myDate = Now 
dateNow = Format(myDate, "MM/dd/yyyy") 
nextMonth = DateAdd(DateInterval.Month, 5, dateNow) 'compute the next 5 months from date now. Let say, #12/6/2012# the result will be #5/6/2013# 


MessageBox.Show(DateDiff(DateInterval.Month, dateNow, nextMonth) & "months==> " & nextMonth) 
'This will count the number of months interval. The result will be 5 months=>> #5/6/2013 because we count december to may. 
+0

http://stackoverflow.com/faq#promotion – spinningarrow