установка переменной с результатом функции - PullRequest
1 голос
/ 15 апреля 2010

Я вызываю следующую функцию с

Call GameTimer(FormatDate(objLiveCommentary("DateFirstStarted"), "WithTime"), 
               FormatDate(objLiveCommentary("DateSecondStarted"), "WithTime"), 
               "Soccer")

И он печатает результаты как 23, 35, 64, 90. Я хочу взять этот результат и сохранить его как

CurrentGameTime = 

потому что я сохраню CurrentGameTime в моей базе данных. Как я могу это сделать?

Function GameTimer (FirstStarted, SecondStarted, GameType)

If GameType =   "Soccer"    Then
    DateFirstStarted    = DateDiff("n", FirstStarted, FormatDate(NOW(), "WithTime"))
    DateSecondStarted   = DateDiff("n", SecondStarted, FormatDate(NOW(), "WithTime"))

    If DateFirstStarted <= 45 Then
    Response.Write DateFirstStarted
    ElseIf DateFirstStarted <= 45 Then
    DateFirstStarted
    ElseIf DateSecondStarted <= 45 Then
    Response.Write DateSecondStarted + 45
    ElseIf DateFirstStarted <= 45 Then
    DateFirstStarted
    Else 
    Response.Write "90"
    End If  
End If

End Function

1 Ответ

1 голос
/ 15 апреля 2010

Чтобы вернуть результат вашей функции, вам нужно установить возвращаемое значение функции:

Function GameTimer(FirstStarted, SecondStarted, GameType)
    ...
    GameTimer = 90
End Function

Ваш GameTimer Функция должна выглядеть примерно так:

Function GameTimer(FirstStarted, SecondStarted, GameType)
    Dim result
    result = 90

    If GameType = "Soccer" Then
        DateFirstStarted = DateDiff("n", FirstStarted, FormatDateTime(Now(), 0))
        DateSecondStarted = DateDiff("n", SecondStarted, FormatDateTime(Now(), 0))

        If DateFirstStarted <= 45 Then
            result = DateFirstStarted
        End If

        If DateSecondStarted <= 45 Then
            result = DateSecondStarted + 45
        End If
    End If

    GameTimer = result
End Function

Это бы сработало, но это все еще не чистый код.

Во-первых, вы должны избавиться от GameType , потому что вам действительно нужно определить длину периода:

Function GameTimer(FirstStarted, SecondStarted, PeriodInMinutes)
    Dim result
    result = PeriodInMinutes * 2

    DateFirstStarted = DateDiff("n", FirstStarted, FormatDateTime(Now(), 0))
    DateSecondStarted = DateDiff("n", SecondStarted, FormatDateTime(Now(), 0))

    If DateFirstStarted <= PeriodInMinutes Then
        result = DateFirstStarted
    End If

    If DateSecondStarted <= PeriodInMinutes Then
        result = DateSecondStarted + PeriodInMinutes
    End If

    GameTimer = result
End Function

Использование

CurrentGameTime = GameTimer(FormatDateTime(objLiveCommentary("DateFirstStarted"), 0),
    FormatDateTime(objLiveCommentary("DateSecondStarted"), 0),
    45)

Следующим шагом будет замена параметров FirstStarted и SecondStarted на Array, чтобы разрешить игры с третями и четвертями.


Массив времен начала периода

Function GameTimer(Periods, PeriodInMinutes)
    Dim result
    Dim currenttime
    Dim i

    result = 0 '-- preset to zero --'

    For i = 1 To (UBound(Periods))
        currenttime = DateDiff("n", Periods(i), FormatDateTime(Now(), 0))

        If currenttime > 0 Then
            If (currenttime <= PeriodInMinutes * i) Then
                result = currenttime + (PeriodInMinutes * (i - 1))
            Else
                result = PeriodInMinutes * i
            End If
        End If
    Next

    GameTimer = result
End Function

Usage

Dim CurrentGameTime
Dim IceHockeyPeriods(3)

IceHockeyPeriods(1) = "2010-04-15 19:30"
IceHockeyPeriods(2) = "2010-04-15 20:00"
IceHockeyPeriods(3) = "2010-04-15 20:30"

CurrentGameTime = GameTimer(IceHockeyPeriods, 20)

Редактировать

Рефакторинг для исправления недостатка, который между периодами возвращает полный рабочий день.

...