按年份排列的经典ASP排序列表,然后按月排序

时间:2013-07-26 15:25:58

标签: asp-classic vbscript

我有一个日期列表,格式如下:YYYY-MM-DD

我希望能够按年份(2013年,2012年,2011年)按降序排序,然后按月升序(1月,2月,3月......)。所以我正在寻找的是:

2013-01-01
2013-02-01
2013-03-01
2013-04-01
2013-05-01

2012-01-01
2012-02-01
2012-03-01
...
2012-12-01

2011-01-01
2011-02-01
2011-03-01
...
2011-12-01

请注意,本年度的列表在12月之前是不完整的,所以这就是为什么它只会到2013-05-01。前几年将在1月至12月完成。

我做了一个类似于此的泡泡排序:

For i = 0 to Ubound(dateArray)
    For j = i + 1 to Ubound(dateArray) 
        if dateArray(i) > dateArray(j) then
            tempDate = dateArray(i)         
            dateArray(i) = dateArray(j)
            dateArray(j) = tempDate
        end if
    Next  
Next

但是这给了我一个如下所示的列表:

2011-01-01
2011-02-01
2011-03-01
...
2011-12-01

2012-01-01
2012-02-01
2012-03-01
...
2012-12-01

2013-01-01
2013-02-01
2013-03-01
2013-04-01
2013-05-01

关闭,但不完全。

2 个答案:

答案 0 :(得分:2)

当两年中的年份相同时,您需要对升序进行排序,而当年份不同时,您需要降序:

Sub SwapValues(ByRef a, ByRef b)
    buf = a : a = b : b = buf
End Sub

...

If Year(dateArray(i)) = Year(dateArray(j)) Then
  If dateArray(i) > dateArray(j) Then
    SwapValues dateArray(i), dateArray(j)
  End If
Else
  If dateArray(i) < dateArray(j) Then
    SwapValues dateArray(i), dateArray(j)
  End If
End If

我添加了一个交换值的过程,以简化代码。

答案 1 :(得分:1)

我之前见过这个......我想这就是我解决它的方法。

For i = 0 to Ubound(dateArray)
    For j = i + 1 to Ubound(dateArray) 
        if (year(dateArray(i)) < year(dateArray(j))) or (year(dateArray(i)) = year(dateArray(j)) and month(dateArray(i)) > month(dateArray(j)))then
            tempDate = dateArray(i)         
            dateArray(i) = dateArray(j)
            dateArray(j) = tempDate
        end if
    Next  
Next