51Testing软件测试论坛

标题: 最近输入大量数据时用到的随机产生日期的函数,拿来分享下 [打印本页]

作者: wz403692767    时间: 2011-8-17 15:40
标题: 最近输入大量数据时用到的随机产生日期的函数,拿来分享下
本帖最后由 wz403692767 于 2011-8-17 15:41 编辑

之前网上搜罗半天没找到相关的,自己动手写了,可能有BUG,自己用没啥问题,现在拿出来分享下,需要的拿去吧
功能就是产生大量随机数据时需要产生的随机日期,在脚本中调用 RandomDate("2010-1-1","2011-8-16") 就可以了
  1. '========================================
  2. ' 函数名:RandomDate
  3. ' 参数:DateMin, DateMax
  4. ' 返回范围内的随机日期,输入输出的格式有"2000/1/1","2000-1-1"
  5. '=========================================
  6. Function RandomDate(DateMin, DateMax)
  7.         Dim nYearMin,nMonthMin,nDayMin,nYearMax,nMonthMax,nDayMax
  8.         Dim nYear,nMonth,nDay
  9.         Dim DayNum
  10.          '起始日期
  11.         nYearMin = Year(DateMin)
  12.         nMonthMin = Month(DateMin)
  13.         nDayMin = Day(DateMin)
  14.         '终止日期
  15.         nYearMax = Year(DateMax)
  16.         nMonthMax = Month(DateMax)
  17.         nDayMax = Day(DateMax)
  18.         '随机生成一个年份
  19.         nYear = RandomNumber(nYearMin,nYearMax)
  20.         '年份在上下限之内
  21.         If nYear > nYearMin And nYear < nYearMax Then
  22.                 '随机生成一个月份
  23.                 nMonth = RandomNumber(1,12)
  24.                 DayNum = GetDayOfCurrentMonth(nYear,nMonth)
  25.                 '根据月份随机产生日子
  26.                 nDay = RandomNumber(1,DayNum)
  27.         '年份等于下限
  28.         ElseIf nYear = nYearMin And nYear <> nYearMax Then
  29.                 '随机生成的月份大于等于下限的月份
  30.                 nMonth = RandomNumber(nMonthMin,12)
  31.                 DayNum = GetDayOfCurrentMonth(nYear,nMonth)
  32.                 '相等
  33.                 If nMonth = nMonthMin Then
  34.                         nDay = RandomNumber(nDayMin+1,DayNum)
  35.                 '大于
  36.                 ElseIf nMonth > nMonthMin Then
  37.                         nDay = RandomNumber(1,DayNum)
  38.                 End If
  39.         '年份等于上限
  40.         ElseIf nYear = nYearMax And nYear <> nYearMin Then
  41.                 '随机生成的月份小于等于上限的月份
  42.                 nMonth = RandomNumber(1,nMonthMax)
  43.                 DayNum = GetDayOfCurrentMonth(nYear,nMonth)
  44.                 '相等
  45.                 If nMonth = nMonthMax Then
  46.                         nDay = RandomNumber(1,nDayMax-1)
  47.                 '大于
  48.                 ElseIf nMonth < nMonthMax Then
  49.                         nDay = RandomNumber(1,DayNum)
  50.                 End If
  51.         '同年
  52.         ElseIf nYear = nYearMin And nYear = nYearMax Then
  53.                 nMonth = RandomNumber(nMonthMin,nMonthMax)
  54.                 DayNum = GetDayOfCurrentMonth(nYear,nMonth)
  55.                 '月份上下限之内
  56.                 If nMonth > nMonthMin And nMonth < nMonthMax Then
  57.                         nDay = RandomNumber(1,DayNum)
  58.                 '等于月下限
  59.                 ElseIf nMonth = nMonthMin And nMonth <> nMonthMax Then
  60.                         nDay = RandomNumber(nDayMin+1,DayNum)
  61.                 '等于月上限
  62.                 ElseIf nMonth = nMonthMax And nMonth <> nMonthMin Then
  63.                         nDay = RandomNumber(1,nDayMax-1)
  64.                 '同月
  65.                 ElseIf nMonth = nMonthMin And nMonth = nMonthMax Then
  66.                         nDay = RandomNumber(nDayMin,nDayMax)
  67.                 End If
  68.         End If
  69.         '生成结果并处理字符串
  70.         RandomDate = Cstr(nYear) & "-" & Cstr(nMonth) & "-" & Cstr(nDay)
  71. End Function

  72. '============================================
  73. ' 函数名:IsLeapYear
  74. ' 参数:nYear
  75. ' 返回是否是闰年,是为True,否为False
  76. '============================================
  77. Function IsLeapYear(nYear)
  78.         Dim Flag
  79.         If nYear <> "" Then
  80.                 If (nYear Mod 4 = 0) And (nYear Mod 100 = 0) Or (nYear) Mod 400 = 0 Then
  81.                         Flag = True
  82.                 Else
  83.                         Flag = False
  84.                 End If
  85.         End If
  86.         IsLeapYear = Flag
  87. End Function

  88. '===========================================
  89. ' 函数名:GetDayOfCurrentMonth
  90. ' 参数:nYear,nMonth
  91. ' 返回当年当月的天数
  92. '===========================================
  93. Function GetDayOfCurrentMonth(nYear,nMonth)
  94.         Select Case nMonth
  95.                 Case 1
  96.                         GetDayOfCurrentMonth = 31
  97.                 Case 2
  98.                         If IsLeapYear(nYear) Then
  99.                         GetDayOfCurrentMonth = 29
  100.                         Else
  101.                                 GetDayOfCurrentMonth = 28
  102.                         End If
  103.                 Case 3
  104.                         GetDayOfCurrentMonth = 31
  105.                 Case 4
  106.                         GetDayOfCurrentMonth = 30
  107.                 Case 5
  108.                         GetDayOfCurrentMonth = 31
  109.                 Case 6
  110.                         GetDayOfCurrentMonth = 30
  111.                 Case 7
  112.                         GetDayOfCurrentMonth = 31
  113.                 Case 8
  114.                         GetDayOfCurrentMonth = 31
  115.                 Case 9
  116.                         GetDayOfCurrentMonth = 30
  117.                 Case 10
  118.                         GetDayOfCurrentMonth = 31
  119.                 Case 11
  120.                         GetDayOfCurrentMonth = 30
  121.                 Case 12
  122.                         GetDayOfCurrentMonth = 31
  123.         End Select
  124. End Function
复制代码

作者: ermine    时间: 2011-8-17 16:39
  1. Function RandomDate(minDate, maxDate)
  2.         lenDay = DateDiff("d", minDate, maxDate)
  3.         rndDay = RandomNumber(0, lenDay)
  4.         RandomDate = DateAdd( "d", rndDay, minDate)
  5. End Function

  6. For i = 1 to 10
  7.         msgbox RandomDate("2010-1-1", "2011-8-13")
  8. Next
复制代码

作者: 阳光下的橙子    时间: 2011-8-18 17:51
楼主,没必要像你写的这么复杂
而且最好加上Randomize来初始化你的随机函数




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2