webForumDet fria alternativet

Omvandla 527023,483333333 sekunder till timmar och minuter

ASP

21 svar · 1 300 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hej hopp,

finns det någon funktion för att omvandla x sekunder till timmar och minuter?

Jag vill presentera tiden på: " det är 2 timmar och 43 minuter till nästa händelse och jag har en variabel som innehåller tiden till nästa händelse i sekunder.

?

:q

Medlem sedan apr. 20002 487 inlägg
#2

Låt x vara antalet sekunder som skall omvandlas.

(x/60) / 60 = x / 3600 är då antalet timmar.

x % 60 (x modulo 60) är antalet minuter som är kvar.

Medlem sedan maj 20012 080 inlägg
#3

Nu blev det tydligen lite för mycket matematik för mig. Jag är med på principen men hur får jag till koden?

Medlem sedan apr. 20002 487 inlägg
#4

Kan inte ASP, men i PHP skulle jag skrivit nåt sånt här:

<?

$x = 527023;

$hours = floor($x / 3600);
$minutes = floor($x % 60);

echo "$x sekunder är $hours timmar och $minutes minuter.";

?>

floor() är en funktion som avrundar neråt.

Medlem sedan maj 20012 080 inlägg
#5

Försöker få till en liknande syntax i VB men det vill sig inte. Har vi en VB guru på plats som kan översätta Muzzafaraths trevliga kod?

Medlem sedan juli 20033 147 inlägg
#6

Jo de e inte mkt krångligare än php...

storlek = <%=RecSet("tid")%>

storlek / 60 / 60

MVH

Medlem sedan maj 20012 080 inlägg
#7
varTid = 32543534534.23423 ' variabel med ett större antal sekunder
varTimmar = varTid / 3600 ' = Timmar

Problemet består av att jag vill dela på minuter och timmar. Om vi avrundar varTimmar hur får vi reda på hur många minuter som återstår tills nästa avrundning???

Jag behöver få ut x (variabel med ett antal sekunder) i y (timmar) och z (minuter)

Lägger man ihop y och z och omvandlar det till sekunder så ska det bli samma värde som x

Hilfe...

Medlem sedan feb. 20002 300 inlägg
#8

sekunder = 6474
timmar = floor(sekunder / 3600)
minuter = floor((sekunder - timmar*3600) / 60)

Medlem sedan apr. 20002 487 inlägg
#9

Kom precis på att min minuter-grej var väldigt dum...

varMinuter = round(abs((varTimmar * 3600 - varTid) / 60)

^^ Den funkar bättre.

(round() är en funktion som avrundar, och abs() är en funktion som ger absolutvärdet.)

Har skrivit ett test och lagt upp på http://swampc.mine.nu/~muzzafarath/wf.php?sec=32543534534 om ni är intresserade ;)

Medlem sedan maj 20012 080 inlägg
#10

Jag var inne på följande spår men jag antar att den avrundar lite väl friskt ibland... Ska genast porva Muzzafarath förslag. :-)

<% varTid = varDateDiff
			varTimmar = varTid / 3600 
			varMinuter = varTid / 60 
			varFixedMinuter = varTid \ 60
			varFixedTimmar = varTid \ 3600
				if varFixedTimmar => 1 then
				varTaBortAntalTimmar = varFixedTimmar * 60
				varFixedMinuter = varFixedMinuter - varTaBortAntalTimmar
				end if
			%>
			<h1>H= <%=varFixedTimmar%> | M= <%=varFixedMinuter%> </h1>
Medlem sedan feb. 20002 300 inlägg
#11

Muzzafarath skrev:

Kom precis på att min minuter-grej var väldigt dum...

varMinuter = round(abs((varTimmar * 3600 - varTid) / 60)

^^ Den funkar bättre.

(round() är en funktion som avrundar, och abs() är en funktion som ger absolutvärdet.)

Annars är det ju rätt lätt att slippa behöva använda abs genom att skriva:

round((varTid - varTimmar*3600) / 60)

:)

Medlem sedan maj 20012 080 inlägg
#12

<%varTimmar = varTid \ 3600 %>
<%varMinuter = round(abs((varTimmar * 3600 - varTid) / 60)) %>
<h2>T=<%=varTimmar%> | M=<%=varMinuter%></h2>

Detta borde väl fungera? Det går frammåt. Mindre och mindre kod...

Medlem sedan apr. 20002 487 inlägg
#13

Det har du helt rätt i Phorpher ;)

Medlem sedan dec. 20003 563 inlägg
#14

Denna är skriven i asp.net men borde enkelt gå att översätta till vanlig asp.
Det är en funktion där du skickar in två datum att räkna på.
Det ena kan mycket väl vara now().

Private Function TimeLeftToEnd(ByVal start, ByVal stopp) As String
        If DateTime.Now() > start Then ' Den har startat
            If DateTime.Now() > stopp Then ' Den har slutat
                Return "n/a"
            Else ' Den håller på just nu
                Dim tidkvar, dagar, timmar, minuter As Integer
                Dim StrReturn As String
                tidkvar = DateDiff(DateInterval.Minute, DateTime.Now(), stopp)
                If tidkvar < 720 Then
                    label_finished_time.ForeColor = System.Drawing.Color.Red
                End If

                dagar = Int(tidkvar / 1440)
                tidkvar = tidkvar - (dagar * 1440)

                timmar = Int(tidkvar / 60)
                tidkvar = tidkvar - (timmar * 60)

                minuter = tidkvar

                Select Case dagar
                    Case 1
                        StrReturn = "1 dag "
                    Case 0
                    Case Else
                        StrReturn = dagar & " dagar "
                End Select

                Select Case timmar
                    Case 1
                        StrReturn &= "1 timme "
                    Case 0
                    Case Else
                        StrReturn &= timmar & " timmar "
                End Select

                Select Case minuter
                    Case 1
                        StrReturn &= "1 minut "
                    Case Else
                        StrReturn &= minuter & " minuter "
                End Select
                Return StrReturn
            End If
        Else ' Den har inte startat än
            Return "n/a"
        End If
    End Function

Detta borde väl fungera? Det går frammåt. Mindre och mindre kod...

Trams ;)

Medlem sedan juli 2000836 inlägg
#15

Vad är det för fel på:

tid	= 527023.483333333

timmar	= Int(tid / 3600)
minuter	= Int(tid / 60) mod 60
sekunder= Int(tid) mod 60
Medlem sedan mars 20015 287 inlägg
#16

Skulle detta kunna fungera tro?


<%
x = 527023

h = int(x/3600)
m = round((x - (h*3600))/60)
response.write h & " h - " & m & " m"
%>

Red./ Hupp, där hade det kommit en lösning ser jag, jag var också inne på Mod, men fick inte till det.

Medlem sedan juli 2000836 inlägg
#17

solbulle skrev:

Skulle detta kunna fungera tro?


<%
x = 527023

h = int(x/3600)
m = round((x - (h*3600))/60)
response.write h & " h - " & m & " m"
%>

Nope, detta skulle ge att 3590 sec är: 0 h - 60 m och 3640 sec är: 1 h - 1 m vilket blir lite galet...

Medlem sedan mars 20015 287 inlägg
#18

RED./ Nu raderar jag detta inlägg och hoppas att inte fler än Sebbe han läsa det. :r

Medlem sedan juli 20011 084 inlägg
#19

det var ju en intressant lösning som Johnsen kom med, och helt klart den bästa. Tänkte bara kolla om jag är på rätt spår.(det ser rätt ut, men vill försäkra mig)

[red]tid[/red]     = [blue]120372[/blue] [i]' i minuter[/i]

[red]veckor[/red]  = Int([red]tid[/red] / [blue]10080[/blue])
[red]dagar[/red]   = Int([red]tid[/red] / [blue]1440[/blue]) mod 7
[red]timmar[/red]	= Int([red]tid[/red] / [blue]60[/blue]) mod 24
[red]minuter[/red]	= Int([red]tid[/red]) mod 60

Den skall då räkna ut antalet veckor/dagar/timmar/minuter från tid som är ett visst antal minuter. Stämmer det?

Medlem sedan mars 20015 287 inlägg
#20

Det där kan väl i alla fall inte fungera, alla månader har ju inte lika många dagar.

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)