aspclassic - Datediff每个月治疗30天

时间:2016-01-29 22:13:46

标签: asp-classic datediff

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

1 个答案:

答案 0 :(得分:0)

有趣的问题,因为它并不像看起来那么简单。从代码效率的角度来看,核心答案取决于您使用的代码语言。但是,一般来说,请考虑这一点;

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语句可以更有效(更快)代码,但是,有些人不知道如何有效地使用它们,所以大多数现代的#ta;语言不使用GoTo(羞耻,叹息)。

假设您正在使用不隐式声明var类型的脚本lang,上面应该可以工作,但理想情况下,如果您选择的lang支持var类型声明,则应该使用它们。

希望你觉得这很有用。

加里