/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
tal,sekunder til hh:mm ?
Fra : Preben J


Dato : 13-11-03 01:07

Hej.
Jeg har et hulens problem!
Jeg henter et heltal som er sekunder i en record og vil gerne have det tal
omregnet til timer & minutter...
response.Write (rs("sekunder"))
Jeg prøvede med response.Write (rs("sekunder")/3600) men det giver ikke
noget, jeg kunne godt tænke mig at f.eks 5400 sekunder blev skrevet ud som
01:30 selv om det jo giver 1,5

Er der en der kan hjælpe mig videre ?

Mvh.
Preben J.



 
 
Torben Brandt (13-11-2003)
Kommentar
Fra : Torben Brandt


Dato : 13-11-03 02:08

Preben J skrev:
> Jeg henter et heltal som er sekunder i en record og vil gerne have det tal
> omregnet til timer & minutter...
> response.Write (rs("sekunder"))
> Jeg prøvede med response.Write (rs("sekunder")/3600) men det giver ikke
> noget, jeg kunne godt tænke mig at f.eks 5400 sekunder blev skrevet ud som
> 01:30 selv om det jo giver 1,5
>
> Er der en der kan hjælpe mig videre ?

Man kan mig bekendt ikke vælge at udskrive et tal (fx 1,5) i
60-talssystemet (som 1:30 jo er), men man kan relativt nemt udregne
antal timer og minutter:
secs = rs("sekunder")
hours = secs \ 3600
mins = (secs - hours * 3600) \ 60
Response.Write hours & ":" & mins
Bemærk at min divisions-operator ('\') vender "forkert", det betyder at
decimaler smides væk i resultatet, så 7 \ 4 = 1 mens 7 / 4 = 1,75.

En metode hvor man mere bruger at der er tale om et tidspunkt er
Response.Write FormatDateTime(TimeSerial(0, 0, rs("sekunder")), 4)
Den vil i modsætning til den første altid vise timer og minutter som 2
cifre (01:30)

/Torben


Jens Gyldenkærne Cla~ (13-11-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 13-11-03 07:23

Torben Brandt skrev:

> secs = rs("sekunder")
> hours = secs \ 3600
> mins = (secs - hours * 3600) \ 60

Udtrykket secs - hours * 3600 kan også skrives således:

   secs mod 3600

Mod står for modulus som giver "resten" ved heltalsdivision.

Følgende ligning gælder for regning med heltalsdivision (\) og
modulus:
   (a \ b) * b + (a mod b) = a

Eksempler:

   10 \ 3 = 3
   10 mod 3 = 1
   3 * 3 + 1 = 10

   117 \ 50 = 2
   117 mod 50 = 17
   50 * 2 + 17 = 117
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Preben J (13-11-2003)
Kommentar
Fra : Preben J


Dato : 13-11-03 10:13

Jeg siger mange tak for svarene
Mvh.
Preben J.



Preben J (13-11-2003)
Kommentar
Fra : Preben J


Dato : 13-11-03 23:39


Hej.
Det virker ellers fint nok, men når sekunderne når op omkring et eller
andet "loft", så får jeg flg. error på,
Response.Write "<b>UpTime:</b> " & FormatDateTime(TimeSerial(0, 0,
rs("server_uptime")), 4)

------------Error begin----------
Microsoft VBScript runtime error '800a0006'
Overflow: '[number: 39754]'
\PAGES\../default.asp, line 35
------------Error End------------

Jeg har så fundet flg. men kan ikke se mig ud af hvordan jeg får det til
at virke, er der en der kan "oversætte"?

Cause: cINT limitation causes this error. The range of numbers that cINT
can convert is between -32,768 to 32,767
Solution: Use INT() if possible.

Mvh.
Preben J.



Torben Brandt (14-11-2003)
Kommentar
Fra : Torben Brandt


Dato : 14-11-03 00:38

Preben J skrev:
> Det virker ellers fint nok, men når sekunderne når op omkring et eller
> andet "loft", så får jeg flg. error på,
> Response.Write "<b>UpTime:</b> " & FormatDateTime(TimeSerial(0, 0,
> rs("server_uptime")), 4)
>
> ------------Error begin----------
> Microsoft VBScript runtime error '800a0006'
> Overflow: '[number: 39754]'
> \PAGES\../default.asp, line 35
> ------------Error End------------
>
> Jeg har så fundet flg. men kan ikke se mig ud af hvordan jeg får det til
> at virke, er der en der kan "oversætte"?
>
> Cause: cINT limitation causes this error. The range of numbers that cINT
> can convert is between -32,768 to 32,767
> Solution: Use INT() if possible.

Ja, det er tilsyneladende rigtigt.
Brugen af Int i stedet for CInt er dog hvis man vil afrunde et kommatal,
der er større end 32767 til et heltal. Det er ikke helt det der er
problemet her, omend begrundelsen er den samme...

I dokumentationen for TimeSerial [1] (som jeg ikke lige læste ;) ), står:
"However, if any single argument is outside the range -32,768 to
32,767, [...] an error occurs."

ASP/VBS arbejder med flere datatyper som du sikkert ved (fx heltal,
strenge, dato/tid, kommatal). Der er dog to typer at heltal, Integer og
Long. Integer løber imellem -32,768 og 32,767 og er åbenbart det der
forventes af TimeSerial. Long bruges til større tal.

Vores problem er så at der er 86400 sekunder på et døgn [2], så vi kan
ikke bare gå fra antal sekunder til en tid vha TimeSerial. Der er dog
kun 1440 minutter, så vi skriver bare:
FormatDateTime(TimeSerial(0, rs("sekunder") \ 60, 0), 4)
Dvs vi beregner antal minutter (rs("sekunder") \ 60) og sætter dem ind
på minut-pladsen.


[1]
<URL:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfcttimeserial.asp>

[2] Jeg har antaget at du kun skal vise tidspunkter på max et døgn, da
du vil udskrive det som hh:mm. Hvis du skal vise længere tidsrum så skal
det måske rettes yderligere til...

PS. Du har sikkert ikke problemet, men hvis du bruger MS Access, så skal
din felttype være sat til Langt Heltal, hvilket svarer til Long i
ASP/VBS, mens Heltal svarer til Integer.
Så du har sikkert allerede en gang taget stilling til hvor stort et tal
feltet sekunder kan have :)

mvh Torben


Preben J (14-11-2003)
Kommentar
Fra : Preben J


Dato : 14-11-03 00:58

Tak for dit hurtige og fyldige svar, Torben

Jeg er ved at afprøve den første du foreslog,

secs = rs("sekunder")
hours = secs \ 3600
mins = (secs - hours * 3600) \ 60
Response.Write hours & ":" & mins
Den nederste har jeg så ændret til,
Response.Write "<b>UpTime:</b> " & Right("0" & hours, 2) & ":" & Right("0"
& mins, 2)

Felttype er sat til langt heltal, så jeg venter på at sekunder online når
grænsen igen for at se om den metode er bedre.

Men ellers så drejer det sig om en server som smider onlinesekunderne op i
en db og det er så bare alle de sekunder jeg vil have trukket ud som timer &
minutter, men jeg tror på den mulighed du gav første gang

Mvh.
Preben J.



Preben J (15-11-2003)
Kommentar
Fra : Preben J


Dato : 15-11-03 13:07

"Preben J" <no@spam.wanted> skrev i en meddelelse
news:3fb41a70$0$70012$edfadb0f@dread12.news.tele.dk...
> secs = rs("sekunder")
> hours = secs \ 3600
> mins = (secs - hours * 3600) \ 60
> Response.Write hours & ":" & mins
> Den nederste har jeg så ændret til,
> Response.Write "<b>UpTime:</b> " & Right("0" & hours, 2) & ":" &
Right("0"
> & mins, 2)

Det virker upåklageligt, tak for hjælpen, Torben

Mvh. Preben J.



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste