Rekenen met datums

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan terhuijzen

jan terhuijzen

27/08/2012 20:29:54
Quote Anchor link
Hallo, ik wil even graag weten hoe ik met datums kan rekenen in PHP
met strtotime() kun je eigenlijk alleen maar rekenen met datum erbij of datum eraf.
Als ik nu bijvoorbeeld de datum 27-6-2012 heb en ik wil weten hoeveeel HELE dagen dat geleden is, hoe doe ik dat?
Het gaat me erom dat ik kan zorgen dat leden van mijn loginsysteem elke dag 1 nieuw tegoedpunt krijgen. Als een lid meerdere keren per dag inlogt dan mag er dus niet opnieuw op dezelfde dag 1 tegoedpunt bij worden gerekend.

Kan iemand een klein stukje voorbeeld code laten zien?
Stel dat de variabele $laatste_login de datum van de laatste login bevat en dat de variabele $registratie de datum van de registratie van het lid bevat.
Alle datums zijn zo opgebouwd: 00-00-0000 00:00:00 (d-m-Y h:i:s)
Gewijzigd op 27/08/2012 20:30:42 door Jan terhuijzen
 
PHP hulp

PHP hulp

21/11/2024 22:35:06
 
John Berg

John Berg

27/08/2012 20:37:31
Quote Anchor link
Sinds PHP 5.3 is er de datetime class.

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
public function Age( $timestr )
  {

    $dt = new \DateTime();
    $interval = $dt->diff( new \DateTime( $timestr ));
    if( $interval->d )
      return $interval->format('%d days ago');
    else if( $interval->h )
      return $interval->format('%h hours ago');
    else
      return $interval->format('%i minutes ago');
  }

?>
Gewijzigd op 27/08/2012 20:39:06 door John Berg
 
Jan terhuijzen

jan terhuijzen

27/08/2012 20:57:41
Quote Anchor link
Dus dat returns de tijd die tussen de eerste login gisteren zit en de eerste login vandaag?
 
John Berg

John Berg

27/08/2012 21:01:55
Quote Anchor link
Yep. $timestr komt bij mij uit een MYSQL database.

Van de PHP site, maar dan procedurele stijl:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$datetime1
= date_create($laatste_login);
$datetime2 = date_create($registratie);
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
?>
Gewijzigd op 27/08/2012 21:04:00 door John Berg
 
Jan terhuijzen

jan terhuijzen

27/08/2012 21:11:13
Quote Anchor link
Oke bedankt dit is handig.
 
Joren de Wit

Joren de Wit

27/08/2012 21:35:20
Quote Anchor link
Als je de mogelijkheid hebt, is het de moeite waard om het rekenen met data en tijden in de database zelf te doen. Deze is daar over het algemeen beter in dan PHP. Zie ook: http://dev.mysql.com/doc/en/date-and-time-functions.html
 
Jan terhuijzen

jan terhuijzen

27/08/2012 21:48:35
Quote Anchor link
Oke, de kolom in de database waar de datum van de laatste login in staat wordt steeds ge update bij een login. Dus ik moet alleen kijken of de laatste login meer dan 1 dag geleden is (dus gisteren).
Hoe doe ik dat dan?
 
John Berg

John Berg

27/08/2012 21:58:25
Quote Anchor link
Voordat je de login bijwerkt:

select DateDiff(Now(), LastLogin) from userTable where userId = Id
Gewijzigd op 27/08/2012 21:59:02 door John Berg
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/08/2012 07:27:46
Quote Anchor link
Of tijdens de login:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
UPDATE
    userTable
SET
    userPoints=
        IF(lastLogin < CURRENT_DATE(), userPoints+1, userPoints),
    lastLogin=NOW()
WHERE
    userID=666
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.