2016-01-29 3 views
0

Как DateDiff рассчитывать каждый месяц из диапазона с ровно 30 днями.aspclassic - Datediff обрабатывают каждый месяц с 30 днями

Пример:

2016-03-01 2016-03-31 = 30 days 
2016-04-01 2016-04-30 = 30 days 
2016-05-01 2016-05-31 = 30 days 
2016-06-01 2016-06-30 = 30 days 
total= 120 days 

Использование DATEDIFF

datediff("d",cdate("2016-3-01"),cdate("2016-6-30"))  
return = 121 days 

мне нужно его рассматривать 30-дневные месяцы и годы с 365

ответ

0

Интересный вопрос, потому что это не так просто, как кажется. Ответ на corect, с точки зрения эффективности кода, зависит от используемого вами кодового языка. Но, в общем, рассмотрим это;

Sub Days_of_30() 
' declare some Variables 

    Dim YBeg, YEnd, Y 'Years: Start, End, Loop Yr Val 
    Dim M1, M2   'Months 
    Dim iDif   'Day Dif 
    Dim nxtYR   'Required coz no GoTo 

//parameters here 
    YBeg = 2016  'Set Start Year 
    YEnd = 2019  'Set End Year 

//General Code 

    For Y = YBeg To YEnd 
    nxtYR = Y + 0 
    For M1 = 1 To 12 'Loop each Month 

    M2 = M1 + 1 

    Select Case M1 
     Case 12 
     nxtYR = Y + 1 
     M2 = 1 
    End Select 

    iDif = DateDiff("d", CDate(M1 & "/" & 1 & "/" & Y), _ 
          CDate(M2 & "/" & 1 & "/" & nxtYR)) 

    //*** Output here 
    If iDif = 30 Then Debug.Print CDate(M1 & "/" & 1 & "/" & Y) 
    Next 
Next 

End Sub 

Это должно вывести все 30-дневные месяцы в диапазоне параметров. Очевидно, что код может быть намного эффективнее (быстрее) с помощью операторов GoTo, но некоторые люди не знают, как их использовать эффективно, поэтому большинство «современных» языков не используют GoTo (позор, вздох).

Предполагая, что вы используете скриптовый язык, который неявно объявляет типы var, приведенное выше должно работать, но в идеале, если ваш выбор языка поддерживает объявления типа var, вы должны их использовать.

Надеюсь, вы сочтете это полезным.

Gary