Time 时间段按优先级合并算法

Time 时间段按优先级合并算法,time,asp-classic,Time,Asp Classic,我一直在尝试开发一种算法来解析经典ASP中不同优先级的时间段 有没有办法解决高优先级周期重叠的时间段(不解决每天的优先级) -- 输入示例: periodId(0) = 0: startDate(0) = dateValue("15-01-01"): endDate(0) = dateValue("15-03-31") periodId(1) = 1: startDate(1) = dateValue("15-01-18"): endDate(1) = dateValue("15-02-

我一直在尝试开发一种算法来解析经典ASP中不同优先级的时间段

有没有办法解决高优先级周期重叠的时间段(不解决每天的优先级)

--

输入示例:

periodId(0) = 0: startDate(0) = dateValue("15-01-01"): endDate(0) = dateValue("15-03-31")    
periodId(1) = 1: startDate(1) = dateValue("15-01-18"): endDate(1) = dateValue("15-02-08")    
periodId(2) = 2: startDate(2) = dateValue("15-02-02"): endDate(2) = dateValue("15-02-16")    
periodId(3) = 3: startDate(3) = dateValue("15-01-29"): endDate(3) = dateValue("15-02-05")    
periodId(4) = 4: startDate(4) = dateValue("15-03-01"): endDate(4) = dateValue("15-03-08")
--

示例输出:

resolvedId(0) = 0: resolvedStart(0) = "15-01-01": resolvedEnd(0) = "15-01-17"    
resolvedId(1) = 1: resolvedStart(1) = "15-01-18": resolvedEnd(1) = "15-01-28"    
resolvedId(2) = 3: resolvedStart(2) = "15-01-29": resolvedEnd(2) = "15-02-05"    
resolvedId(3) = 2: resolvedStart(3) = "15-02-06": resolvedEnd(3) = "15-02-16"    
resolvedId(4) = 0: resolvedStart(4) = "15-02-17": resolvedEnd(4) = "15-02-28"    
resolvedId(5) = 4: resolvedStart(5) = "15-03-01": resolvedEnd(5) = "15-03-08"    
resolvedId(6) = 0: resolvedStart(6) = "15-03-09": resolvedEnd(6) = "15-03-31"
图形示例:

……有什么想法吗

提前谢谢你

-----编辑15-03-13-----

我需要数组作为输出-图像只是为了更好地理解。我需要以日期作为输出的数组

我开发了算法:

<%' ....
i = 0
while not objRS.Eof
    redim preserve periodId(i)  'integer
    redim preserve startDate(i)  'date
    redim preserve endDate(i)    'date

    'DB parse
    periodId(i) = objRS("idc")
    periodStartDateIn(i) = DateValue(objRS("tempDatumStart"))
    periodEndDateIn(i)   = DateValue(objRS("tempDatumKonec"))

    'date limit detection
    if periodStartDateIn(i) < resolvedMinDate then resolvedMinDate = periodStartDateIn(i)
    if periodEndDateIn(i)   > resolvedMaxDate then resolvedMaxDate = periodEndDateIn(i)

    i = i + 1
    objRs.moveNext
wend

lastIndex = -1
redim preserve resolvedIndex(0)
redim preserve resolvedStartDate(0)
redim preserve resolvedEndDate(0)
for dateActual = resolvedMinDate to resolvedMaxDate
    for index = lbound(periodId) to ubound(periodId)
        if periodStartDateIn(index) <= dateActual and dateActual <= periodEndDateIn(index) then
            IndexActual = index
            exit for
        end if
    next

    if IndexActual <> lastIndex then
        if lastIndex <> -1 then 'not first pass
            redim preserve resolvedIndex(ubound(resolvedIndex) + 1)
            redim preserve resolvedStartDate(ubound(resolvedStartDate) + 1)
            redim preserve resolvedEndDate(ubound(resolvedEndDate) + 1)
            resolvedEndDate(ubound(resolvedEndDate)-1) = dateActual - 1 'close prev period
        end if
        resolvedIndex(ubound(resolvedIndex)) = IndexActual
        resolvedStartDate(ubound(resolvedStartDate)) = dateActual
    end if
    lastIndex = IndexActual
next
resolvedEndDate(ubound(resolvedEndDate)) = dateActual - 1

'...
%>
resolvedMaxDate然后resolvedMaxDate=periodEndDateIn(i)
i=i+1
objRs.moveNext
温德
lastIndex=-1
redim保留resolvedIndex(0)
redim保留resolvedStartDate(0)
redim保留resolvedEndDate(0)
for dateActual=ResolvedMandate到resolvedMaxDate
对于索引=lbound(periodId)到ubound(periodId)

如果periodStartDateIn(index)这更像是一个设计问题。你需要拿着铅笔和纸坐下来,找出可能遇到的潜在情况。这里的关键是你的时间可以重叠的地方:

_______________________________ |<Start Time End Time>| <-- Comparable time range |<Start Time End Time>| |<Start Time End Time>| |<Start Time End Time>| |<Start Time End Time>| _______________________________ ||