Avatar billede nitz Nybegynder
08. maj 2003 - 10:46 Der er 4 kommentarer og
1 løsning

Datediff - countdown problem

Hej alle,

Jeg har et problem med en datediff hvor jeg prøver at vise hvor meget tid der er tilbage udfra en given record i en database.

Det virker fint nok med at få vist tiderne som jeg ønsker: dage - timer - minutter - sekunder. Men den tæller bare ikke rigtigt. Når der for eksempel er gået 60 minutter så starter minutterne godt nok forfra med at tælle ned, men hvis timerne stod på 11 før, så står de stadig på 11 i måske 30 minutter istedetfor at gå ned på 10.

Koden ser således ud:

    <% dage=datediff("d",now(),rs("endnow"))  %>
    <% tim=datediff("h",now(),rs("endnow"))  %>
    <% mins=datediff("n",now(),rs("endnow"))  %>
    <% sek=datediff("s",now(),rs("endnow"))  %>

Og her vises den:

<% =dage %> dag<% if dage <> 1 then %>e&nbsp;<%end if%>&nbsp;<% =tim mod 24 %> time<% if tim <> 1 then %>r&nbsp;<%end if%>&nbsp;<% =mins mod 60 %> minut<% if mins <> 1 then %>ter&nbsp;<%end if%>&nbsp;<% =sek mod 60 %> sekund<% if sek <> 1 then %>er<%end if%>.<br>

Håber nogen kan fortælle mig hvad problemet er.

hilsener

Tommy
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 10:52 #1
Jeg har faktisk en lavet et par funktioner, som kan den du forespørger!.. Det eneste du skal fodre den med, er en dato:

Function SecondsToText(Seconds)
Dim bAddComma
Dim Result
Dim sTemp

If Seconds <= 0 Or Not IsNumeric(Seconds) Then
    SecondsToText = "0 " & strSeconds
    Exit Function
End If

Seconds = Fix(Seconds)

If Seconds >= 86400 Then
  days = Fix(Seconds / 86400)
Else
  days = 0
End If

If Seconds - (days * 86400) >= 3600 Then
  hours = Fix((Seconds - (days * 86400)) / 3600)
Else
  hours = 0
End If

If Seconds - (hours * 3600) - (days * 86400) >= 60 Then
minutes = Fix((Seconds - (hours * 3600) - (days * 86400)) / 60)
Else
minutes = 0
End If

Seconds = Seconds - (minutes * 60) - (hours * 3600) - _
  (days * 86400)

If Seconds > 0 Then Result = Seconds & "&nbsp;" & AutoS(Seconds, "isSecond")

If minutes > 0 Then
    bAddComma = Result <> ""
   
    sTemp = minutes & "&nbsp;" & AutoS(minutes, "isMinute")
    If bAddComma Then sTemp = sTemp & ", "
    Result = sTemp & Result
End If

If hours > 0 Then
    bAddComma = Result <> ""
   
    sTemp = hours & "&nbsp;" & AutoS(hours, "isHour")
    If bAddComma Then sTemp = sTemp & ", "
    Result = sTemp & Result
End If

If days > 0 Then
    bAddComma = Result <> ""
    sTemp = days & "&nbsp;" & AutoS(days, "isDay")
    If bAddComma Then sTemp = sTemp & ", "
    Result = sTemp & Result
End If

SecondsToText = Result
End Function


Function AutoS(Number, what)
    select case what
        case "isDay"
            dt1 = strDay
            dt2 = strDays
        case "isSecond"
            dt1 = strSecond
            dt2 = strSeconds
        case "isMinute"
            dt1 = strMinute
            dt2 = strMinutes
        case "isHour"
            dt1 = strHour
            dt2 = strHours
        case "isDay"
            dt1 = strDay
            dt2 = strDays
        End select
       
    If Number = 1 Then AutoS = dt1 Else AutoS = dt2
End Function

Du skal dog lige ændre i mine language-variabler, således, at den outputter på det sprog du gerne vil ha'!

Du bruger den således:

Response.Write SecondsToText(dateDiff("s",now(),mrs("ReleaseDate")))

Mvh,

/thomas regin.
Avatar billede nitz Nybegynder
08. maj 2003 - 11:04 #2
Hej Thomas,

Jeg prøver lige at lege med det og se om jeg kan tilpasse det, så vender jeg lige tilbage ok :)
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 11:25 #3
Alright!..

Det eneste du faktisk skal ændre:

Function AutoS(Number, what)
    select case what
        case "isDay"
            dt1 = "Dag"
            dt2 = "Dage"
        case "isSecond"
            dt1 = "Sekund"
            dt2 = "Sekunder"
        case "isMinute"
            dt1 = "Minut"
            dt2 = "Minutter"
        case "isHour"
            dt1 = "Time"
            dt2 = "Timer"
        case "isDay"
            dt1 = "Dag"
            dt2 = "Dage"
        End select
       
    If Number = 1 Then AutoS = dt1 Else AutoS = dt2
End Function

Mvh,

/thomas regin.
Avatar billede nitz Nybegynder
08. maj 2003 - 11:29 #4
Thomas.... det lader jo til at virke perfekt!!! ...men det vidst du vel ;)

TUSIND tak for hjælpen!

hilsener

Tommy
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 11:29 #5
Hehe.. Jeg havde ihvertfald en idé om det! ;)

Mange tak for pointene og god fornøjelse med det!

Mvh,

/thomas regin.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester