这不是一个家庭作业问题:)。
我想编写一个函数,如果在给定日期过去6个月后返回True(那么,我是在第七个月的第一天)。
函数PassedSixMonthsSince(Dim dGivenDate as Date,Dim dCurrentDate as Date)as Boolean
这些是此函数必须通过的一些测试:
Debug.Assert PassedSixMonthsSince(“2000-01-01”,“2000-07-01”)= True
Debug.Assert PassedSixMonthsSince(“2000-01-31”,“2000-07-31”)= True
Debug.Assert PassedSixMonthsSince(“2000-08-31”,“2001-02-28”)= False
Debug.Assert PassedSixMonthsSince(“2007-08-31”,“2008-02-29”)= False
Debug.Assert PassedSixMonthsSince(“2000-05-31”,“2000-11-30”)= False
我试过使用DateAdd(“m”,6,dGivenDate),但这并不容易。
感谢 米歇尔
答案 0 :(得分:1)
我没有安装VB6,但我尝试了这个VBScript代码:
<script language="vbscript">
Function PassedSixMonthsSince(dGivenDate, dCurrentDate)
'' // should be just greater, not greater or equals
PassedSixMonthsSince = _
CDate(dCurrentDate) >= DateAdd("m", 6, CDate(dGivenDate))
MsgBox _
"Is " & CDate(dCurrentDate) & _
" greater or equal than " & DateAdd("m", 6, CDate(dGivenDate)) & _
" ? = " & PassedSixMonthsSince
End Function
PassedSixMonthsSince "2000-01-01", "2000-07-01" ''// exactly 6 months
PassedSixMonthsSince "2000-01-31", "2000-07-31" ''// exactly 6 months
PassedSixMonthsSince "2000-08-31", "2001-02-28" ''// One day less 6 months
PassedSixMonthsSince "2000-05-31", "2001-11-30" ''// One day less 6 months
</script>
我替换了您的日期分隔符以使用短划线并更正了"2001-02-29"
错误的日期。但你的断言是错误的。
答案 1 :(得分:1)
DataAdd是正确的方法。您可以在指定日期添加六个月:
PassedSixMonthsSince = DateAdd("m", 6, dGivenDate) >= dCurrentDate
或者您可以从当前日期减去六个月:
PassedSixMonthsSince = dGivenDate >= DateAdd("m", -6, dCurrentDate)
如果没有得到正确的结果,那是因为你写的日期无法正确解析。你使用的格式是(AFAIK)你自己的格式,它没有被使用。标准化格式(ISO 8601)为"2000-02-29"
,还有其他常见格式,如"2/29/2000"
和"29/2/2000"
。如果要使用日期文字而不是解析字符串,则它们由井号标记:#2000-02-29#
。
答案 2 :(得分:0)
看起来DateDiff()在VB6中可用...
IF DateDiff("m", FirstDate, SecondDate) >= 6 THEN
return ture
ELSE
return false
END IF
沿着这些方向的某些事情
答案 3 :(得分:0)
我已经解决了这段代码:
Function PassedSixMonthsSince(ByVal dGivenDate as Date,ByVal dCurrentDate as Date)
dGivenDateWithSixMonthsAdded=DateAdd("m", 6, dGivenDate)
if Day(dGivenDate)<>Day(dGivenDateWithSixMonthsAdded) then
dGivenDateWithSixMonthsAdded=DateAdd("d", 1,dGivenDateWithSixMonthsAdded)
end if
PassedSixMonthsSince = (dCurrentDate >= dGivenDateWithSixMonthsAdded)
End Function