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
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.
Nu blev det tydligen lite för mycket matematik för mig. Jag är med på principen men hur får jag till koden?
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.
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 Jo de e inte mkt krångligare än php...
storlek = <%=RecSet("tid")%>
storlek / 60 / 60
MVH
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 sekunder = 6474
timmar = floor(sekunder / 3600)
minuter = floor((sekunder - timmar*3600) / 60)
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 ;)
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
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)
:)
<%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...
Det har du helt rätt i Phorpher ;)
cyprysMedlem sedan dec. 20003 563 inlägg 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 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 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
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 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 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 Det där kan väl i alla fall inte fungera, alla månader har ju inte lika många dagar.