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 :(得分: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类型声明,则应该使用它们。
希望你觉得这很有用。
加里