如何计算从VB6中的给定日期开始已过去六个月?

时间:2010-01-30 11:48:46

标签: algorithm vb6

这不是一个家庭作业问题:)。

我想编写一个函数,如果在给定日期过去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),但这并不容易。

感谢 米歇尔

4 个答案:

答案 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