2012-10-26 86 views
0

我已經編寫了下面的代碼來查找五個日期中最老的日期。它按預期工作,但我很好奇,如果有更好的方法來比較五個日期。有沒有人有任何想法?比較VBScript中的五個日期

Dim sTemp 
sTemp = "" 

If IsDate(dtOne) Then 
    If IsDate(dtTwo) Then 
     If CDate(dtOne) < CDate(dtTwo) Then 
      sTemp = dtOne 
     Else 
      sTemp = dtTwo 
     End If 
    Else 
     sTemp = dtOne 
    End If 
ElseIf IsDate(dtTwo) Then 
    sTemp = dtTwo 
End If 

If IsDate(dtThree) Then 
    If IsDate(sTemp) Then 
     If CDate(dtThree) < CDate(sTemp) Then 
      sTemp = dtThree 
     End If 
    Else 
     sTemp = dtThree 
    End If 
End If 

If IsDate(dtFour) Then 
    If IsDate(sTemp) Then 
     If CDate(dtFour) < CDate(sTemp) Then 
      sTemp = dtFour 
     End If 
    Else 
     sTemp = dtFour 
    End If 
End If 

If IsDate(dtFive) Then 
    If IsDate(sTemp) Then 
     If CDate(dtFive) < CDate(sTemp) Then 
      sTemp = dtFive 
     End If 
    Else 
     sTemp = dtFive 
    End If 
End If 

回答

1

如何這樣的事情,它的每個比較,如果沒有通過變量日起恢復STEMP爲「」:

Dim sTemp 
sTemp = "" 
sTemp = OldestDate(dtOne, dtTwo) 
sTemp = OldestDate(dtThree, sTemp) 
sTemp = OldestDate(dtfour, sTemp) 
sTemp = OldestDate(dtfive, sTemp) 

Function OldestDate(dtOne, dtTwo) 
    If IsDate(dtOne) Then 
     If IsDate(dtTwo) Then 
      If CDate(dtOne) < CDate(dtTwo) Then 
       OldestDate = dtOne 
      Else 
       OldestDate = dtTwo 
      End If 
     Else 
      OldestDate = dtOne 
     End If 
    ElseIf IsDate(dtTwo) Then 
     OldestDate = dtTwo 
    Else 
     OldestDate = "" 
    End If 
End Function 
0

我會用這樣的:

sTemp = GetOldestOf(sTemp, dtOne) ' this instruction makes "dtOne" the current 
            ' current oldest date, b/c "sTemp" is auto- 
            ' initialized as Empty 
sTemp = GetOldestOf(sTemp, dtTwo) 
sTemp = GetOldestOf(sTemp, dtThree) 
sTemp = GetOldestOf(sTemp, dtFour) 
sTemp = GetOldestOf(sTemp, dtFive) 

If isEmpty(sTemp) Then 
    WScript.Echo "No valid date found!" 
Else 
    WScript.Echo "Oldest date is: " & sTemp 
End If 

' pre-condition: d1 is either Empty or the current oldest date 
Function GetOldestOf(ByVal d1, ByVal d2) 
    GetOldestOf = d1   ' make d1 the default return value 
    If IsDate(d2) Then  ' d2 is a valid date 
    d2 = CDate(d2) 
    If IsEmpty(d1) Then  ' if d1 is empty, d2 is automatically oldest 
     GetOldestOf = d2 
    ElseIf d1 > d2 Then  ' otherwise check if d2 is older 
     GetOldestOf = d2 
    End If 
    End If 
End Function 

GetOldestOf()如果參數是有效日期並且第一個參數是Empty或比第二個參數更新,則返回第二個參數(轉換爲日期) ENT。否則,該函數將返回(未修改的)第一個參數,該參數根據定義是Empty或當前最早的日期。

0

你問了一個優雅的方法,然後使用一個ArrayList,填充它並對其進行排序。在概念驗證碼之下,它不處理例外情況,因爲沒有一個日期有效:

' Create a new arraylist 
Set arrayList = createobject("System.Collections.ArrayList") 

' Loop through all dates 
For each d in array("23-5-2007", "28-6-2010", "16-9-2001", "32-12-2000") 
    ' See if the date is valid. If true, convert it to a date and add it to the list 
    If isDate(d) Then arrayList.Add cDate(d) 
Next 

' Sort the list from oldest to newest date 
arrayList.Sort 

' Get the first item, it will be the oldest date (16-9-2001) 
OldestDate = arrayList.Item(0)