[PHP] Vraagje over tijd

Pagina: 1
Acties:

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 04-09 14:23

R4NCOR

eigenlijk gewoon Niels

Topicstarter
Ik zet een tijd in de database, in het volgende formaat: (d.m.Y h:i)

Nou haal ik die na een tijdje weer uit de database, en dan wil ik kijken of dat langer dan tien minuten geleden is, ja of nee... Ik heb alleen geen idee hoe ik dat aanpak, want gewoon 10 eraf trekken gaat niet werken lijkt me.

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:00

Pelle

🚴‍♂️

Als je er een tijd- en datumveld van gemaakt hebt in MySQL (neem aan dat je dat gebruikt?), dan kun je daar makkelijk mee rekenen. Geldt ook voor timestamps.
Als je je eigengemaakte timestamps gebruikt, dan wordt het wat lastiger.

Kijk eens naar deze php-functies:
http://php.net/explode
http://php.net/date
http://php.net/mktime

Hint cq voorzeg mode:
Explode je timestamp om er dagen, maanden, jaren, uren en minuten van te maken. Bereken een timestamp van de huidige tijd, en trek daar een timestamp vanaf van de tijd die je uit je record gehaald hebt. Kijk of verschil groter is dan 600 (60sec * 10mins). Klaar.

Verwijderd

Je zou de tijd op kunnen slaan als timestamp. Dan kan je kijken of het 10*60=600 seconden geleden is of niet.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:21
Op vrijdag 05 juli 2002 02:44 schreef Pelle het volgende:
Kijk eens naar deze php-functies:
http://php.net/explode
Explode, da's creatief?
Explode je timestamp om er dagen, maanden, jaren, uren en minuten van te maken.
Ah nee, dat gaat dus met localtime() of gmtime().

Verder is 't wel de juiste methode. Nooit een datum converteren naar tekst als je 'm in een database stopt. Als DATE opslaan is natuurlijk 't netste, maar als je toch al met een timestamp begon, kun je 'm ook wel als INT UNSIGNED kan opslaan.

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 04-09 14:23

R4NCOR

eigenlijk gewoon Niels

Topicstarter
Heb het in de tussentijd iets anders opgelost (helemaal niet meer aan dit topic gedacht :) )

Bij elke visit op een page:
PHP:
1
<?$nu = date(ymdhi);$sql = "UPDATE _users SET lasthit='$nu' WHERE username='$currentuser'";mysql_query($sql);?>

En dit is het whois-online-scriptje:
PHP:
1
<?Online op deze site:&amp;nbsp;                    <?$nu = date(ymdhi);$uur = date(h);$minuut = date(i)-15;if ($minuut < 0) {     $minuut = 60 + $minuut;    $minuutm = "1";    $uur = $uur - 1;    $uurm = "1";}if ($minuut < 10) { $minuut = "0".$minuut; }if ($uurm == "1") {     if ($uur < 10) { $uur = "0".$uur; }}$net = date(ymd) . $uur . $minuut;$som = $nu - $net;if ($minuutm == "1") {    $som = $som - 40;}$sql = "SELECT username FROM _users WHERE lasthit > $net AND username != 'Guest'";$result = mysql_query($sql);while ($row = mysql_fetch_object($result)) {    echo "<b><a href=profiel.php?user=$row->username>$row->username</a></b>, ";    $onlineusers++;}if ($onlineusers < 1) {     echo "<b>niemand</b> ";}?>in de afgelopen 15 minuten.?>

Waarschijnlijk heel omslachtig en heel onlogisch, maar dat zijn mijn scripts wel vaker :D Ik zoek altijd naar creatieve oplossingen als ik er met mijn kennis niet op een normale manier uitkom.

En mijn kennis is niet zo groot, vandaar :)

Verwijderd

PHP:
1
<?$timenowen = date("Y-m-d H:i:s");$opentime = opentime($starttime, $timenowen, "human");//Verschil tussen twee tijden berekenen//usage: opentime($begin, $eind, $notatie);function opentime($begin, $eind, $notatie) { $starttime = mysqltime2epoch($begin); $endtime = mysqltime2epoch($eind); $elapsed_time = (($endtime - $starttime) / 3600); $elapsed_time = sprintf("%0.3f", $elapsed_time); if ($notatie == "human") {  $days = floor($elapsed_time / 24);  $time = $elapsed_time - ($days * 24);  $hours = floor($time);  $time = $time - $hours;  $minutes = floor($time * 60);  unset($time);  if ($days > 0) { $time = "$days" . "d"; }  if ($hours > 0) { $time .= " $hours" . "h"; }  if ($minutes > 0) { $time .= " $minutes" . "m"; }  if ($days == 0 &amp;&amp; $hours == 0 &amp;&amp; $minutes == 00) { $time .= " < 1 minuut"; } } else {  $time = $elapsed_time; } return($time);}?>

Toevallig heb ik dat van de week gemaakt voor eigen gebruik :P

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 04-09 14:23

R4NCOR

eigenlijk gewoon Niels

Topicstarter
Ben er net achter gekomen dat ik er nog een paar dikke fouten in had zitten :)

Ben er mee bezig enzo.

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 22:00

Pelle

🚴‍♂️

Op vrijdag 05 juli 2002 03:05 schreef Soultaker het volgende:
Explode, da's creatief?
Wou jij dan met substrings gaan werken? Hij heeft z'n timestamp in een eigen formaat als string opgeslagen.
Ah nee, dat gaat dus met localtime() of gmtime().
Dan mag jij mij even uitleggen hoe je met localtime van de string "d.m.Y H:i" een timestamp maakt.
gmtime() is geen PHP functie overigens.

Verwijderd

Waarom sla je niet de timestamp op in de database op het moment dat hij inlogt. (functie time() zie http://www.php.net/manual/en/function.time.php)

Op het moment dat je wil kijken vraag je weer de timestamp op...vergelijkt deze met elkaar hoeveel seconden daar tussen zit en aan de hand van dat resultaat voer je een actie uit.

Op deze manier hoef je je tijd niet helemaal uit elkaar te pluizen om te kijken wat het verschil is.

Verwijderd

Op vrijdag 05 juli 2002 14:44 schreef Tranqi het volgende:
Waarom sla je niet de timestamp op in de database op het moment dat hij inlogt. (functie time() zie http://www.php.net/manual/en/function.time.php)

Op het moment dat je wil kijken vraag je weer de timestamp op...vergelijkt deze met elkaar hoeveel seconden daar tussen zit en aan de hand van dat resultaat voer je een actie uit.

Op deze manier hoef je je tijd niet helemaal uit elkaar te pluizen om te kijken wat het verschil is.
edit:

scheisse
je kan ook gewoon doen:
$tijdnu=time(date("D:m:y H:m:s"););

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 19:50
Als je nu gewoon bij het inzetten van de tijd / datum in de databse time(); gebruikt dan kan je er later zelf de notatie bij kiezen. En het is makkelijker met rekenen

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Als je je tijd/datum als een tijd/datum veld (choose from plenty) opslaat, kun je met de date/time functions van MySQL zo ongeveer alles wat je nodig hebt. Vooral DATE_FORMAT, DATE_SUB en DATE_ADD.

Mocht je toch met UNIX timestamps willen werken, dan komen FROM_UNIXTIME en UNIX_TIMESTAMP wel in handy.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Op vrijdag 05 juli 2002 14:54 schreef robbinh het volgende:
je kan ook gewoon doen:
$tijdnu=time(date("D:m:y H:m:s"););
het kan nog makkelijker :)
$tijdnu = time();

Pas de replâtrage, la structure est pourrie.


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Verschillen PHP date/time en MySql
PHP zit een datum als een integer dat het aantal secondes bevat na 1 jan 1970 een zogenaamde UNIX Timestamp.

MySql slaat datum anders op namelijk in het formaat
DDMMYYHHIISS

Het makkelijkste om mee te rekenen is natuurlijk de UNIX timestamp. Echter kun je hier alleen mee rekenen in het PHP script. Vanuit performence technische redenen wil je zoveel mogelijk. Echter is het werken met integers natuurlijk sneller dan werken met een datum. Dus we vergeten alle speciale velden die er in mysql voor datum zijn.
En slaan gewoon de unixtimestamp op als een unsigned integer.
10 minuten = 600 seconden. Het selecteren van users wordt dus een eitjes 'SELECT * FROM online WHERE time=>'+(now()-600)

Vergeet niet van je tabel een HEAP tabel te maken, aangezien er hier nogal wat bewerkingen op worden gedaan.

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Hier wil ik toch nog even iets over zeggen.

Het is heel goed mogelijk om de unix timestamps van php te combineren met MySQL timestamp/datetime velden, d.m.v. de mysql functies FROM_UNIXTIME en UNIX_TIMESTAMP. Voorbeeldje:
PHP:
1
<?$tijd = time();// doe wat je wilt met de ingebouwde php tijd functies$query = 'UPDATE tabel SET tijd = FROM_UNIXTIME(' . $tijd . ')';$result = mysql_query($query);?>

Pas de replâtrage, la structure est pourrie.


  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op zaterdag 06 juli 2002 00:36 schreef Apollo_Futurae het volgende:
Hier wil ik toch nog even iets over zeggen.

Het is heel goed mogelijk om de unix timestamps van php te combineren met MySQL timestamp/datetime velden, d.m.v. de mysql functies FROM_UNIXTIME en UNIX_TIMESTAMP. Voorbeeldje:
PHP:
1
<?$tijd = time();// doe wat je wilt met de ingebouwde php tijd functies$query = 'UPDATE tabel SET tijd = FROM_UNIXTIME(' . $tijd . ')';$result = mysql_query($query);?>
Doe dan gewoon
PHP:
1
<?$query = 'UPDATE tabel SET tijd = NOW()';$result = mysql_query($query);?>

:)

Verder raad ik ook aan om de MySQL datum velden te gebruiken. Deze zijn er niet voor niets en je bent gewoon veel flexibeler met de MySQL date/time funtions dan wanneer je met integers gaat lopen klooien... Bv. wil je toch de unix timestamp hebben, dan doe je toch gewoon even een SELECT UNIX_TIMESTAMP(date) :? Of wil je er toch mee gaan rekenen? Ook goed.. cast em even naar een integer...

On track

Pagina: 1