Avatar billede konder Nybegynder
12. maj 2008 - 19:35 Der er 22 kommentarer og
1 løsning

Tidsforskelle i timer/min.

Jeg ville utrolig gerne kunne trække:2008-05-12 06:21:11 fra: 2008-05-12 12:15:15  Og få resultatet i dag/timer/min. Det er fra db i dette format. Er det bedre at operere i Unix?
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 21:11 #1
Hvordan vil du regne, når dit tidsrum dækker et eller flere skift til og fra sommertid?

Ignorerer du det problem, og er dine tidspunkter mellem år 1970 og 2038, så kan du lave dem til til unixtimestamp, finde differencen, og med lidt division og så'n finde minutter, timer, dage, år etc.
Avatar billede konder Nybegynder
12. maj 2008 - 22:09 #2
Jeg vil da helst ikke ignorerer problemetmed sommertid. Men det med unixtimestamp har voldt nogen problemer med hensyn til at få datoformat med dato, timer, min, og sek  omformet til mktime($time, $minut, 0, $mdr, $dag, $aar).
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 22:22 #3
Det er ikke så slemt:

  $dato='2008-05-12 06:21:11';
  $a=split("[: -]",$dato);
  print mktime($a[3], $a[4], 0, $a[1], $a[2], $a[0])
Avatar billede konder Nybegynder
12. maj 2008 - 22:59 #4
Får bare Warning: mktime() expects parameter 6 to be long, string given in C:\AppServ\www\chris\timer\tids.php on line 36
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 23:05 #5
Så putter du noget forkert ind i den. Med

  print mktime($a[3], $a[4], "prutter", $a[1], $a[2], $a[0])

få man fejlen:
Warning: mktime() expects parameter 3 to be long, string given
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 23:07 #6
Og man får også samme fejl med:

  print mktime($a[3], $a[4], "", $a[1], $a[2], $a[0])

Hvad står der i din dato?
Avatar billede konder Nybegynder
12. maj 2008 - 23:15 #7
2008-04-13 13:01:45
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 23:23 #8
Selv med den dato virker det. Der er noget andet galt. Check: http://n0p.com/831076.php
Avatar billede konder Nybegynder
12. maj 2008 - 23:32 #9
Parse error: syntax error, unexpected T_STRING in C:\AppServ\www\chris\timer\tids.php on line 34
og det er:34  $dato='$row['kom']';
Avatar billede erikjacobsen Ekspert
12. maj 2008 - 23:48 #10
Der skal nok bare stå:  $dato=$row['kom'];
Avatar billede konder Nybegynder
13. maj 2008 - 20:14 #11
Undskyld det lange fravær. Jeg var ved at opgi. Har dette:
Dato:2008-05-13 14:10:10
Kom kl.:2008-05-13 06:10:20
Gik kl.:79990.000000
2008-05-13 06:10:20
Warning: mktime() expects parameter 6 to be long, string given in C:\AppServ\www\chris\timediff.php on line 38
og denne kode:
$qry = mysql_query("SELECT dag, kom, gik, gik-kom AS nytid FROM tiden WHERE dag = '2008-05-13 00:00:00'")
or die (mysql_error());

while ($row=mysql_fetch_assoc($qry)){
echo "<FONT SIZE='2' COLOR='#339999'>Dato:{$row['gik']}</FONT>";
echo "<br>";
echo "<FONT SIZE='2' COLOR='#339999'>Kom kl.:{$row['kom']}</FONT>";
echo "<br>";
echo "<FONT SIZE='2' COLOR='#339999'>Gik kl.:{$row['nytid']}</FONT>";
echo "<br>";
echo $row['kom'];
}

$dato=$row['kom'];

$a=split("[: -]",$dato);
  print mktime($a[3], $a[4], 0, $a[1], $a[2], $a[0])

og det ser ud til at virke hvis jeg fodre med de eksakte tal:2008-05-13 06:10:20, så der går noget galt med $dato=$row['kom'];
den blir ved med de 6 parametre-fejl.
Avatar billede erikjacobsen Ekspert
13. maj 2008 - 20:27 #12
Ja, du kan ikke aflæse $row['kom'] når du er kommet ud af while-løkken, og der ikke længere står noget fra databasen i $row.
Avatar billede konder Nybegynder
13. maj 2008 - 21:03 #13
selvfølgelig.Mange tak for hjælpen.
Nu ved jeg så blot ikke hvordan jeg får differencen mellem kom og gik (28800sek)omregnet på en smart måde til evt.dage,timer, min.
Avatar billede erikjacobsen Ekspert
13. maj 2008 - 21:33 #14
(utestet)

$sek=28800;
print floor($sek / 60)." minutter og ".($sek % 60)." sekunder";
Avatar billede konder Nybegynder
13. maj 2008 - 21:46 #15
Helt fint, men jeg får jo ikke først timer.
Avatar billede erikjacobsen Ekspert
13. maj 2008 - 21:55 #16
Næh, men når du har minutterne, kan du regne timer/minutter ud på samme måde.
Avatar billede konder Nybegynder
13. maj 2008 - 22:08 #17
Mange tak for hjælpen. Læg endelig et svar.
Avatar billede erikjacobsen Ekspert
13. maj 2008 - 22:31 #18
Jeg samler slet ikke på point, tak. Svar selv, accepter så dit eget svar.
Avatar billede konder Nybegynder
13. maj 2008 - 22:38 #19
Det var ihvertfald en god hjælp.
Hvad betyder floor?
Avatar billede erikjacobsen Ekspert
13. maj 2008 - 22:41 #20
Du fjerner bare hvad der står efter decimalkomma, og får et heltal. 
floor(7.913) = 7.
Avatar billede konder Nybegynder
13. maj 2008 - 22:50 #21
Tak igen. Jeg får måske efterhånden stykket det sammen så jeg kan lave et simpelt bookingsystem. Måske har du et godt råd eller lign.
Avatar billede konder Nybegynder
13. maj 2008 - 23:05 #22
g`nat
Avatar billede erikjacobsen Ekspert
14. maj 2008 - 08:53 #23
Hmm, et godt råd ... lad mig se: læg aldrig en pose vingummi i forruden i bilen på en sommerdag med solskin.

Men hvis det var til dit system, så måske: lav funktioner til dine beregninger.
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