Avatar billede prebenrunge Nybegynder
01. september 2008 - 20:50 Der 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 ?
Avatar billede jakobdo Ekspert
01. september 2008 - 20:57 #1
At konvertere til minutter vil nok ikke være en dum ide og så konvertere forskellen om igen.
Avatar billede prebenrunge Nybegynder
01. september 2008 - 21:18 #2
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.
Avatar billede thesurfer Nybegynder
01. september 2008 - 21:51 #3
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..
Avatar billede prebenrunge Nybegynder
01. september 2008 - 22:35 #4
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.
Avatar billede roenving Novice
02. september 2008 - 01:23 #5
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. !-)
Avatar billede prebenrunge Nybegynder
02. september 2008 - 22:59 #6
Jeps, den virker perfekt, tak for hjælpen
smider du et svar for point
Avatar billede roenving Novice
03. september 2008 - 23:03 #7
Velbekomme '-)
Avatar billede roenving Novice
05. september 2008 - 03:13 #8
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester