Asp classic aspclassic-Datediff每月治疗30天

Asp classic aspclassic-Datediff每月治疗30天,asp-classic,datediff,Asp Classic,Datediff,如何从正好30天的范围内每月计算DateDiff 示例: 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")) retur

如何从正好30天的范围内每月计算DateDiff

示例:

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年的问题,因为它并不像看上去的那么简单。从代码效率的角度来看,正确的答案取决于您使用的代码语言。但是,一般来说,考虑一下这一点;
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类型声明,您应该使用它们

希望你觉得这个有用

加里