01. september 2008 - 20:50Der er
7 kommentarer og 1 løsning
omregning af string til tidsformat
Jeg har en hel del data (klokkeslet) i streng format "08:00" som jeg skal trække fra hinanden eks. gået kl."16:30" og kommet klokken "08:30" altså "16:30" - "08:30". gået tiden kan godt være efter midnat så det ser således ud "02:30" - "19:30". det er ikke nogen bestemt dag eller dato, så jeg har kun klokken.
Kan man ikke omregne strengen til Timeformat og bare trække dem fra hinanden, eller er jeg nød til splitte det hele ad og udregne det hele i minutter for derefter at regne det tilbage til en streng med timer og min ?
ja det kan lade sig gøre, men det er da lidt af en kode, hvis man kunne slippe med at konverterer til tidsformat, som jo kan trækkes fra hinanden pr. default.
Hvis du kunne smide dato på (så det er 01-09-2008 08:00 i stedet for bare 08:00), så burde det ikke være noget problem.
Du har ikke beskrevet hvordan du vil bruge det, så dte begrænser mulighederne.. eller også kunne man fyre en masse løsninger af, der ikke passede din problemstilling..
Forklar hvad, hvordan, og vis din nuværende kode, osv..
I min klub har vi et vagtskema (10personer) hvor vi har i en form så kan se hvem der har vagt fra kl. til kl. eks. person 1 fra 08:30 til 11:30, person fra 11:30 til 14:30 osv. hele døgnet. jeg vil gerne i skemaet vise hvor mange timer hver person har vagt. eks. jens: 08:30 - 11:45 = 3:30 Peter: 11:45 - 14:30 = 2:45 osv. tiderne står i vores sql database, og jeg har svært ved at udregne tiderne ud, på en let måde. Der kunne godt påføres en tilfældig dato, da datoen er ligegyldigt, bare den tager højde for at hvis sluttiden er mindre end start tiden, så er det jo næste dag. slut resultatet skal ikke indeholde datoen men kun klokkeslettet.
indputfelterne hedder starttid og sluttid resultatet kunne jo hedde samletid, men ellers er der ikke megen kode ud over selve html koden.
Du kan bare sætte dem ind i et Date-objekt, og så regulere for negative værdier:
var tid1 = "08:30"; var tid2 = "11:45";
var datoTid1 = new Date(); tid1 = tid1.split(":"); datoTid1.setHours(tid1[0]); datoTid1.setMinutes(tid1[1]);
var datoTid2 = new Date(); tid2 = tid2.split(":"); datoTid2.setHours(tid2[0]); datoTid2.setMinutes(tid2[1]);
-- efter den øvelse vil du have 2 tidspunkter på den aktuelle dato, som du så kan trække fra hinanden:
var tidDiff = datoTid2.getTime() - datoTid1.getTime();
-- hvilket giver differencen i millisekunder, som så kan omregnes til timer og minutter:
var h = Math.floor(tidDiff/(60*60*1000));//divider med antal min pr. time og antal sek. pr. min. samt reguler for 1/1000 s. var m = Math.round( (tidDiff/(60*1000))%60 );//forkort til minutter og find minut-resten
-- så skal du tage højde for evt. forskelle i datoer, det er simpelt nok, da det vil være et negativt resultat, hvis datoerne er forskellige (jeg går ud fra, at i ike opererer med vagter på over 24 timer !-)
tidDiff = tidDiff>0 ? tidDiff : 24*60*60*1000+tidDiff;//træk fra 24 timer, hvis negativt
Alt i alt bliver det til:
<script language="javascript" type="text/javascript"> var tid1 = "08:30"; var tid2 = "11:45";
var datoTid1 = new Date(); tid1 = tid1.split(":"); datoTid1.setHours(tid1[0]); datoTid1.setMinutes(tid1[1]);
var datoTid2 = new Date(); tid2 = tid2.split(":"); datoTid2.setHours(tid2[0]); datoTid2.setMinutes(tid2[1]);
var tidDiff = datoTid2.getTime() - datoTid1.getTime(); tidDiff = tidDiff>0 ? tidDiff : 24*60*60*1000+tidDiff;//træk fra 24 timer, hvis negativt
var h = Math.floor(tidDiff/(60*60*1000));//divider med antal min pr. time og antal sek. pr. min. samt reguler for 1/1000 s. var m = Math.round( (tidDiff/(60*1000))%60 );//forkort til minutter og find minut-resten
alert(h+":"+m); </script>
-- her er det ikke lavet som en funktion, som du nok har brug for, men jeg tror du kan se ideen, og så selv baske det sammen (jeg kender jo heller ikke din kontekst i html -- forms mv. !-)
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.