查看完整版本: 如何生成两个日期之间的随机值

vincenthan 2008-6-27 17:54

如何生成两个日期之间的随机值

如生成在2008-06-01到2009-01-04范围内的随机日期

xiaoyaoke 2008-6-27 18:39

Function GetRanDate
For i = 0 to 100
   Dim sYear,sMonth,sDay
   Randomize
   sYear = Int((4 * Rnd) + 2004)
   Randomize
   sMonth = Int((12*Rnd)+1)
   Randomize
   sDay = Int((31*Rnd)+1)
   sGetRanDate = sYear &"-"&sMonth&"-"&sDay
   sResult = RegExpTest("^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$",sGetRanDate)
   If sResult = True Then
       GetRanDate = sGetRanDate
           Exit For
  End If
Next
End Function

Function RegExpTest(patrn, strng)
Dim regEx, retVal            ' 建立变量。
Set regEx = New RegExp         ' 建立正则表达式。
regEx.Pattern = patrn         ' 设置模式。
regEx.IgnoreCase = False         ' 设置是否区分大小写。
retVal = regEx.Test(strng)         ' 执行搜索测试。
If retVal Then
    RegExpTest =True
Else
    RegExpTest = False
End If
End Function
msgbox GetRanDate

写的比较取巧,不过能用

hsjzfling 2008-6-28 10:27

[code]Function RndDate(dFrom, dTo)
        Dim dDate
        dDate = CDate(dTo) - CDate(dFrom)
        Randomize
        RndDate = CDate(dFrom) + CInt(Rnd()*dDate)
End Function[/code]'For example
MsgBox RndDate("2008-06-01", "2009-01-04")

xiaoyaoke 2008-6-29 18:29

[quote]原帖由 [i]hsjzfling[/i] 于 2008-6-28 10:27 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=1004621&ptid=118783][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
Function RndDate(dFrom, dTo)
        Dim dDate
        dDate = CDate(dTo) - CDate(dFrom)
        Randomize
        RndDate = CDate(dFrom) + CInt(Rnd()*dDate)
End Function'For example
MsgBox RndDate("2008-06-01", "2009-01-0 ... [/quote]

赞一个,简便好用,呵呵

vincenthan 2008-6-30 16:26

:L 果然高手如云啊,看来我得努力了
页: [1]
查看完整版本: 如何生成两个日期之间的随机值