Avatar billede sorenmt84 Juniormester
10. november 2012 - 19:13 Der er 9 kommentarer og
1 løsning

Skriv sekunder pænt

Har et sekundt tal jeg skal have skrevet pænt...
Forstået sådan:
er tallet under 60 skal der bare skrives:
xx sekunder

Men er tallet fx 85 (sekunder) skal det skrive sådan:
1 minut og 25 sekunder

er tallet 216000 skrives der
1 time 0 minutter og 0 sekunder

osv osv
Avatar billede Monkeybrain Juniormester
10. november 2012 - 22:00 #1
nu ved du hvor mange sekunder et time består af, deraf kan du beregne hvor mange sekunder en dag består af, deraf kan du trække de pågældende sekunder fra udgangspunktet og til sidst udskrive dit resultat.

Hvis det er fordi du fisker efter en komplet løsning tror jeg du skal smide det over til kategorien opgaver..
Avatar billede Monkeybrain Juniormester
10. november 2012 - 23:44 #2
men et bud kunne være

    <%
    resttid = 35000
   
        For countday = 0 to resttid step 86400
           
            if resttid > 86400 then

                days = days+1
           
                resttid = resttid-86400
           
            end if

        Next


        For counthour = 0 to resttid step 3600

           
            if resttid > 3600 then

                hours = hours+1
           
                resttid = resttid-3600
           
            end if

        Next


        For countminut = 0 to resttid step 60
           
            if resttid > 60 then

                minuts = minuts+1
           
                resttid = resttid-60
           
            end if   
        Next
       
        seconds = resttid

    %>
    <p><%=days%> dage, <%=hours%> timer, <%=minuts%> minutter, <%=seconds%> sekunder</p>
Avatar billede Monkeybrain Juniormester
11. november 2012 - 00:00 #3
et svar med kommentarer

<%
'starttid som udgangspunkt
'----------------------------
if request.querystring("tid") <> "" then
    resttid = request.querystring("tid")
else
    resttid = 1
end if

'kalkuler dage
'----------------------------
For countday = 1 to resttid step 86400
       
    if resttid > 86400 then
        days = days+1
        resttid = resttid-86400
    end if
       
    if days = "" then
        days = 0
    end if
Next

'kalkuler timer
'----------------------------
For counthour = 1 to resttid step 3600
           
    if resttid >= 3600 then
        hours = hours+1
        resttid = resttid-3600
    end if

    if hours = "" then
        hours = 0
    end if

Next
   
'kalkuler minutter
'----------------------------
For countminut = 1 to resttid step 60
   
    if resttid >= 60 then

        minuts = minuts+1
        resttid = resttid-60
   
    end if   

    if minuts = "" then
        minuts = 0
    end if
Next

'kalkuler sekunder
'----------------------------   
seconds = resttid

if seconds = "" then
seconds = 0
end if

'Udskriver resultat
'----------------------------   
tid = days & " dage, " & hours & " timer, " & minuts & " minutter, " & seconds & " sekunder"
%>
<p><%=tid%></p>
Avatar billede Monkeybrain Juniormester
11. november 2012 - 00:16 #4
nu er det jo sendt og for at det skal være ligesom din formuleren ender vi med dette.

<%
'starttid som udgangspunkt
'----------------------------
if request.querystring("tid") <> "" then
    resttid = request.querystring("tid")
else
    resttid = 1
end if

'kalkuler dage
'----------------------------
For countday = 1 to resttid step 86400
       
    if resttid > 86400 then
        days = days+1
        resttid = resttid-86400
    end if
       
    if days = "" then
        days = 0
    end if
Next

if days > 0 then
    tid = days & " dage, "
end if

'kalkuler timer
'----------------------------
For counthour = 1 to resttid step 3600
           
    if resttid >= 3600 then
        hours = hours+1
        resttid = resttid-3600
    end if

Next

if hours = "" then
    hours = 0
end if

if days = 0 AND hours = 0 then
else
    tid = tid & hours & " timer, "
end if
   
'kalkuler minutter
'----------------------------
For countminut = 1 to resttid step 60
   
    if resttid >= 60 then
        minuts = minuts+1
        resttid = resttid-60
    end if   

Next

if minuts = "" then
    minuts = 0
end if

if days = 0 AND hours = 0 AND minuts = 0 then
else
    tid = tid & minuts & " minutter, "
end if

'kalkuler sekunder
'----------------------------   
seconds = resttid

if seconds = "" then
seconds = 0
end if

tid = tid & seconds & " sekunder."
%>
<p><%=tid%></p>
Avatar billede softspot Forsker
11. november 2012 - 11:55 #5
Du kunne også lave det med en løkke og snask:

function sec2resttime(secs)
  dim txt, rest, arrDiv, arrText, i

  sTime = ""
  arrDiv = array(60,60,24,0)
  arrText = array("sekund", "minut", "time", "dag")
  arrTextFlertal = array("er", "ter", "r", "e")

  rest = secs
  for i = 0 to ubound(arrDiv)
    if rest > 0 or i = 0 then
      if arrDiv(i) > 0 then
        val = rest mod arrDiv(i)
        rest = fix(rest / arrDiv(i))
      else
        val = rest
        rest = 0
      end if

      if val > 0 or (val = 0 and i = 0 and rest = 0) then
        endelse = ""
        if val <> 1 then
          endelse = arrTextFlertal(i)
        end if
        if len(txt) > 0 then
          if instr(txt, " og ") = 0 then
            separator = " og "
          else
            separator = ", "
          end if
        else
          separator = ""
        end if
        txt = val & " " & arrText(i) & endelse & separator & txt
      end if
    end if
  next

  sec2resttime = txt
end function

Jeg har flg. tests til at synliggøre forventningerne til output:

arrSecs2 = array( _
    0, "0 sekunder", _
    1, "1 sekund", _
    11, "11 sekunder", _
    31, "31 sekunder", _
    60, "1 minut", _
    124, "2 minutter og 4 sekunder", _
    1500, "25 minutter", _
    3600, "1 time", _
    10000, "2 timer, 46 minutter og 40 sekunder", _
    86400, "1 dag", _
    100000, "1 dag, 3 timer, 46 minutter og 40 sekunder", _
    200000, "2 dage, 7 timer, 33 minutter og 20 sekunder" _
)

txt = ""
for i = 0 to ubound(arrSecs2) step 2
  secs = arrSecs2(i)
  expected = arrSecs2(i+1)

  actual = sec2resttime(secs)

  txt = txt & secs & " -> " & actual & " => "
  if expected = actual then
    txt = txt & " OK" & vbCrLf
  else
    txt = txt & " Fejl: forventet <" & expected & ">" & vbCrLf
  end if
next

response.write txt
Avatar billede softspot Forsker
11. november 2012 - 11:58 #6
Funktionen iif ser således ud (og er blot en forkortelse af en simpel if-sætning):

function iif(cond, truepart, falsepart)
  if cond then
    iif = truepart
  else
    iif = falsepart
  end if
end function
Avatar billede softspot Forsker
11. november 2012 - 17:57 #7
Kunne du ikke få min løsning til at fungere? Den tager endda højde for ental og flertalsformerne for dag, time, minut og sekund ;-)
Avatar billede sorenmt84 Juniormester
12. november 2012 - 09:36 #8
softspot, jeg må indrømme jeg ikke har prøvet... jeg mente at det var mest fair at tage løsninger oppefra og ned... og så nåede jeg ikke ned til din...

Men mange tak for input
Avatar billede softspot Forsker
12. november 2012 - 09:41 #9
Det giver da mere mening, at tage den løsning der matcher dine behov bedst, men det er jo helt og aldeles dit valg :-)
Avatar billede sorenmt84 Juniormester
12. november 2012 - 21:21 #10
Det er korrekt... Men begge jeres løsninger opfyldte det behov jeg har... og så er det vel fair at tage den der kom først...

Jeg har så lige prøvet din og jeg må indrømme at det er sgu et stykke kram :-)
fedt at det er funktion er altid kan "kaldes på" og nice med rigtig endelse på tiderne mm
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