Avatar billede jannick281090 Nybegynder
05. juni 2008 - 15:47 Der er 4 kommentarer og
1 løsning

Hjælp til DateDiff funktion

Hej allesammen.

Mit script ser således ud:
<%
Function DDIff(d1, d2)
        minutes = abs(datedIff("n", d1, d2))
        If minutes <= 0 Then
            word = "0 minute(s)"
        Else
            word = ""
            If minutes >= (24*60)*365 Then
                word = word & minutes\(24*60)*365 & " year(s), "
            End If
            minutes = minutes mod (24*60)*365
            If minutes >= (24*60)*30 Then
                word = word & minutes\(24*60)*30 & " month(s), "
            End If
            minutes = minutes mod (24*60)*30
            If minutes >= 24*60 Then
                word = word & minutes\(24*60) & " day(s), "
            End If
            minutes = minutes mod (24*60)
            If minutes >= 60 Then
                word = word & minutes\(60) & " hours(s), "
            End If
            minutes = minutes mod 60
            If minutes >= 60 Then
            word = word & minutes & " minute(s)"
            End If
        End If
        DDIff = word
End Function
%>

Så er problemet bare at mit matematik halter lidt hvad det der angår, kan simpelthen ikke få den til at vise det korrekt.

Eksempel:
<%=DDiff("04-06-2007 01:01:01","05-06-2008 02:02:02")%>
Skulle gerne returnere:
1 year(s), 1 month(s), 1 day(s), 1 hour(s), 1 minute(s), 1 second(s)

Men dette er ikke tilfældet :S
Avatar billede softspot Forsker
05. juni 2008 - 16:10 #1
Umiddelbart burde den vel returnere:

1 year(s), 0 month(s), 1 day(s), 1 hour(s), 1 minute(s), 1 second(s)
Avatar billede softspot Forsker
05. juni 2008 - 16:30 #2
Med det regelsæt du har sat op vil resultatet ikke blive præcist (eller i det mindste ikke som man normalt ville forvente), da du antager hver måned har 30 dage (hvilket jo ikke er tilfældet). Derfor vil der blive en afvigelse i antallet af dage ifht. det forventede. Med dit regelsæt, ville jeg flikke rutinen således sammen:

Function DDIff(d1, d2)
  dim rest
  minutes = abs(datedIff("n", d1, d2))
  If minutes <= 0 Then
    word = "0 minute(s)"
  Else
    word = (minutes mod 60) & " minute(s)"
    rest = minutes \ 60
   
    If rest >= 0 Then
      word = (rest mod 24) & " hour(s), " & word
    End If
   
    rest = rest \ 24
    If rest >= 1 Then
      word = (rest mod 30) & " day(s), " & word
    End If
   
    rest = rest \ 30
    If rest >= 1 Then
      word = rest mod 12 & " month(s), " & word
    End If
   
    rest = rest \ 12
    If rest >= 1 Then
      word = rest & " year(s), " & word
    End If
  End If
  DDIff = word
End Function


Det giver med kaldet:

<%=DDiff("04-06-2007 01:01:01","05-06-2008 02:02:02")%>

resultatet:
1 year(s), 0 month(s), 7 day(s), 1 hour(s), 1 minute(s)

Her ser du altså at der tælles 7 dage og ikke 1 som den burde.
Avatar billede jannick281090 Nybegynder
05. juni 2008 - 16:44 #3
Jamen jeg siger tusind tak, det virker jo perfekt nu.
Smid et svar :)
Avatar billede softspot Forsker
05. juni 2008 - 16:49 #4
Velbekomme :)
Avatar billede softspot Forsker
05. juni 2008 - 16:59 #5
Tak for point :)
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