webForumDet fria alternativet

Omvandla 527023,483333333 sekunder till timmar och minuter

21 svar · 1 300 visningar · startad av mattiasnordin

mattiasnordinMedlem sedan maj 20012 080 inlägg
#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

MuzzafarathMedlem 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.

mattiasnordinMedlem 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?

MuzzafarathMedlem 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.

mattiasnordinMedlem 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?

MeleaMedlem sedan juli 20033 147 inlägg
#6

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

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

storlek / 60 / 60

MVH

mattiasnordinMedlem 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...

PhorpherMedlem sedan feb. 20002 300 inlägg
#8

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

MuzzafarathMedlem 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 ;)

mattiasnordinMedlem 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>
PhorpherMedlem 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)

:)

mattiasnordinMedlem 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...

MuzzafarathMedlem sedan apr. 20002 487 inlägg
#13

Det har du helt rätt i Phorpher ;)

cyprysMedlem 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 ;)

JohnsenMedlem 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
solbulleMedlem 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.

JohnsenMedlem 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...

solbulleMedlem 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

mozillaMedlem 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?

solbulleMedlem 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.

140 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
137 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)