Avatar billede dennism Nybegynder
21. februar 2003 - 13:53 Der er 25 kommentarer og
1 løsning

PHP - time

Jeg indsætter en række i min database, hvor en af kolonerne hedder "dato" som automatisk bliver udfyldt med "TIMESTAMP(14)".

Den 14-cifrede Værdien af dato ligger i $row[dato].
Hvordan kan jeg nu regne ud, hvor langtid (i timer og minutter) der er gået fra $row[dato] og til nu?
Avatar billede sthen Nybegynder
21. februar 2003 - 13:57 #1
Hvis du skal til at beregne på tid, så er det meget lettere hvis du benytter UnixEpoch format i stedet for Timestamp.
Avatar billede sthen Nybegynder
21. februar 2003 - 13:58 #2
Unix Epoch angiver antal sekunder der er gået siden 1. januar 1970.
Avatar billede dennism Nybegynder
21. februar 2003 - 13:59 #3
Hmm... Hvad skal min mysql så se ud, istedet for dette:

mysql_query("CREATE TABLE online_chat (
id int(11) NOT NULL auto_increment PRIMARY KEY,
brugernavn VARCHAR(40),
dato TIMESTAMP(14));");
Avatar billede dennism Nybegynder
21. februar 2003 - 14:02 #4
HVad = hvordan
Avatar billede sthen Nybegynder
21. februar 2003 - 14:12 #5
øjeblik
Avatar billede lauer Nybegynder
21. februar 2003 - 14:13 #6
Den kan godt se sådan ud.
Når du selecter skal du bare skrive dette for at få unixEpoch, som sthen skriver

SELECT brugernavn, UNIX_TIMESTAMP(dato) FROM online_chat

derefter kan du bruge date() ( http://dk.php.net/date ) til at omskrive datoen sådan som du vil have det.
Avatar billede sthen Nybegynder
21. februar 2003 - 14:15 #7
mysql_query("CREATE TABLE online_chat (
id int(11) NOT NULL auto_increment PRIMARY KEY,
brugernavn VARCHAR(40),
dato INT(12));");

Men det er ikke sikkert at det bare er gjort med det, det er muligt at nogle af dine scripts skal ændres samtidig.
Avatar billede lauer Nybegynder
21. februar 2003 - 14:17 #8
Hvis du skal have at vide antal sekunder fra den det tidspunkt til nu, kan du gøre sådan

<?php
$res = mysql_query("SELECT brugernavn, UNIX_TIMESTAMP(dato) as dato FROM online_chat");
while($row = mysql_fetch_array($res)) {
print ($row['brugernavn']." - ".time()-$row[dato]." sekunder");
}
?>

Så skal du så omregne til timer og minutter ved divider med 60 og 60.. altså lidt almindelig matematik
Avatar billede dennism Nybegynder
21. februar 2003 - 14:21 #9
Skal jeg ikke have det minuset med tiden nu?
Avatar billede dennism Nybegynder
21. februar 2003 - 14:22 #10
$mysql = mysql_query("SELECT brugernavn, UNIX_TIMESTAMP(dato) as dato FROM online_chat WHERE brugernavn = '$_SESSION[brugernavn]'");

while($row = mysql_fetch_array($mysql)) {
print ($row['brugernavn']." - ".time()-$row[dato]." sekunder");
}

Den retunerer:
-1045833577 sekunder
Avatar billede lauer Nybegynder
21. februar 2003 - 14:28 #11
$mysql = mysql_query("SELECT brugernavn, UNIX_TIMESTAMP(dato) as dato FROM online_chat WHERE brugernavn = '$_SESSION[brugernavn]'");
$row = mysql_fetch_array($mysql);
print ($row['brugernavn']." - ".time()-$row['dato']." sekunder");

og hvad gider det? det kan muligvis være fordi at der ikke står noget i $_SESSION['brugernavn'];

tjek med
print ($_SESSION['brugernavn']." - ".time()-$row['dato']." sekunder");
i stedet
Avatar billede dennism Nybegynder
21. februar 2003 - 14:41 #12
Jeg har testet.. Og $_SESSION[brugernavn] er sat!...

Men... Den retunerer stadig:

-1045834714 sekunder

Men den hehøver altså heller ikke at printe brugernavnet!.. Den skal bare udregne hvor mange timer og minuter der er gået fra $row[dato] og til nu... For så vil jeg efterfølgende indsætte det i en database, så jeg kan holde styr på, hvor langtid de forskellige brugere har været online!
Avatar billede dennism Nybegynder
21. februar 2003 - 14:43 #13
Et eks. på hvad der står i dato nu, er:
20030221144129
Avatar billede lauer Nybegynder
21. februar 2003 - 14:47 #14
hmm... prøv dette

print ($_SESSION['brugernavn']."<br> unixtimestamp: ".time()."<br> mysql:".$row['dato']." sekunder");

Hvad kommer der så?
Avatar billede dennism Nybegynder
21. februar 2003 - 14:53 #15
Så kommer der:

admin
unixtimestamp: 1045835488
mysql:1045835176 sekunder
Avatar billede lauer Nybegynder
21. februar 2003 - 15:01 #16
hmm... og så prøver vi dette

print ($_SESSION['brugernavn']."<br> unixtimestamp: ".time()."<br> mysql:".$row['dato']." sekunder<br> sek imellem:".time()-$row['dato']);
Avatar billede dennism Nybegynder
21. februar 2003 - 15:05 #17
Så siger den:

-1045836208

Jeg forstår altså ik lige hvad vi har galt i :D
Avatar billede lauer Nybegynder
21. februar 2003 - 15:08 #18
Jeg fatter ikke helt hvorfor den skriver det :/
prøv:
print ($_SESSION['brugernavn']."<br> unixtimestamp: ".time()."<br> mysql:".$row['dato']." sekunder<br> sek imellem:".(time()-$row[dato]));
Avatar billede dennism Nybegynder
21. februar 2003 - 15:36 #19
Nu ser det vist lidt bedre ud...

Denne gang sagde den:

admin
unixtimestamp: 1045838037
mysql:1045838027 sekunder
sek imellem:10
Avatar billede lauer Nybegynder
21. februar 2003 - 15:52 #20
godt så har du den jo... :)
Avatar billede dennism Nybegynder
21. februar 2003 - 22:35 #21
Hvad skal jeg så helt præcist gøre, for at få det om til timer og minutter?
Avatar billede lauer Nybegynder
21. februar 2003 - 23:25 #22
Dette er ikke lige testet... men du kan prøve

$min  = $sek / 60;
$hours = $min / 60;
$hours = floor($hours);
$min  = floor($min - ($hours * 60));
$sek  = floor($sek - ($min * 60) - ($hours * 60 * 60));
       
if ($hours == 1) $result .= "$hours time ";
elseif ($hours > 1) $result .= "$hours timer ";
   
if ($min == 1) $result .= "$min minut ";
elseif ($min > 1) $result .= "$min minutter ";
   
if ($sek == 1) $result .= "$sek sekund ";
elseif ($sek > 1) $result .= "$sek sekunder ";
Avatar billede dennism Nybegynder
21. februar 2003 - 23:52 #23
Hvordan kan det være at systemet nogle gange går "istykker" og printer et resultat på omkring "1045867880"? Så langtid har jeg ik være online :D
Avatar billede lauer Nybegynder
22. februar 2003 - 09:14 #24
dunno... ved ikke lige hvordan dit førdige script kom til at se ud
Avatar billede dennism Nybegynder
22. februar 2003 - 09:47 #25
Det er:
$tid = time()-$row[dato];

Det nogle gange indeholder det resultat!.
Avatar billede lauer Nybegynder
22. februar 2003 - 20:55 #26
Så er det fordi at der ikke er nogen dato i databasen.
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