Datums en tijden in PHP

Info 
Door: Admin Moeilijkheidsgraad: 2/3
Views:26.207Reacties: 11(Bekijken)
  Log in om zelf te reageren
 Waardering:8.3/10 (3 stemmen)



Aangezien ik zelf al een tijdje bezig ben met een agenda in PHP heb ik redelijk wat ervaring gekregen met het werken met datums en tijden in PHP. Er zijn een aantal erg handige functies die jou misschien ook wel van pas komen, vandaar deze tutorial.

Date

Ten eerste de 'date'-functie. Die geeft je, afhankelijk van de parameter die je erbij ingeeft, een waarde terug. De syntaxis is zo:
#Code
1
2
3
<?php
$datum = date('parameter');
?>


Je begrijpt: parameter moet je vervangen door een ander symbool. PHP heeft erg veel verschillende parameters, je kunt zel allemaal terugvinden op PHP.net, maar hieronder geef ik je een paar belangrijke parameters (let op! hoofdlettergevoelig!):

d: de huidige dag van de maand, bijvoorbeeld '3'
m: de huige maand, bijvoorbeeld '4' in april
Y: het huidige jaar, bijvoorbeeld 2004

H: uren in 23uurs format, met 0 ervoor, dus 23 bij 11 uur 's avonds
i: minuten, met 0 ervoor, van 00 tot 59
s: seconden, met 0, van 00 tot 59

w: dag van de week, van 0 tot 6 (0= zondag, 6 = zaterdag)

Op deze parameters zijn vele uitbreidingen, zoals met of zonder 0 ervoor, maar maak van Y bijvoorbeeld eens y, dan wordt het geen 2004 maar 04. Er zijn veel varianten mogelijk die ik hier verder niet uitvoerig zal beschrijven.

Zo, stel je voor, we willen de huidige datum weergeven, dus dag, maand en jaar. Dat doe je zo:
#Code
1
2
3
4
<?php
$date = date('d-m-Y');
echo"<p>".$date."</p>";
?>


Dat zou moeten werken. Ook kun je de tijd erbij zetten:
#Code
1
2
3
4
<?php
$date = date('d-m-Y, H-i-s');
echo"<p>".$date."</p>";
?>


Houd er rekening mee dat date jou de servertijd geeft. Staat jouw server bijvoorbeeld in Amerika, dan is het dus 6 uur vroeger volgens date() dan het bij jou echt is. Hier gaan we zometeen wat aan doen, dat komt later wel :wink: .

Ik neem aan dat het gebruik van deze date-functie verder geen problemen meer geeft.

1 nadeel: je kunt op deze manier dus alleen de huidige datum aangeven, en dat zul je niet in alle gevallen willen. Om dat te veranderen gaan we gebruik maken van de 2e parameter van de date-functie, de timestamp. Voordat we die gaan gebruiken laat ik je eerst kennis maken met een 2e handige datumfunctie van PHP, namelijk mktime.

Mktime

Ook deze functie biedt je veel mogelijkheden. Mktime geeft je een datum in de UNIX-vorm: het aantal seconden sinds 1 januari 1970. Lekker handig zul je denken, dat heb ik nou altijd al willen weten!

Toch is het handiger dan je zou denken, dat zie je zo.

Mktime bevat 6 parameters, in de volgende volgorde:
mktime(uren, minuten, seconden, maanden, dagen, jaren);

Let op de vreemde volgorde, die is een beetje vreemd, maar daar leer je wel mee leven.

Het mooie van mktime is dat je datums op verschillende manieren kunt schrijven. Deze geven allemaal 1 mei 2004 weer:
$var = mktime(0, 0, 0, 5, 1, 2004);
$var = mktime(0, 0, 0, 5, 31, 2004);
$var = mktime(24, 0, 0, 5, 30, 2004);
$var = mktime(-24, 0, 0, 5, 2, 2004);

Zoals je ziet, kun je 'rekenen' met mktime: voorbeeld 2 bijvoorbeeld, zegt dat het de 31e dag van april is: die bestaat niet, dus wordt het 1 mei. Voorbeeld 2 vertelt: 24 uur na 30 april, en dat is, jawel, 1 mei. Voorbeeld 4 zegt dat het 24 uur voor 2 mei is, en daar is ie weer: 1 mei!

Je zult je nog steeds vragen wat het jou kan schelen dat het zoveel miljoen seconden na 1970 is. Daarom moet je dat vreemde getal weer omvormen naar een normale datum. En dat doen we met de welbekende date-functie.

Het klinkt misschien vreemd, maar je voert de mktime dus in als 2e parameter van de date-functie. Dan zal PHP het resultaat van mktime ombouwen naar de eerste parameter die jij ingeeft. Stel, je wilt 6 mei 2004 weergeven, dan doe je dus:

#Code
1
2
3
4
5
<?php
$date = date('d-m-Y, H-i-s', mktime(0, 0, 0, 5, 6, 2004)
);
echo"<p>".$date."</p>";
?>


Let erop dat je met 2 haakjes afsluit.

In plaats van de cijfers die je nu invoert, kun je ook variabelen invoeren. Bijvoorbeeld:

#Code
1
2
3
4
5
6
7
<?php
$dag = date('d');
$maand = date('m');
$jaar = date('Y');
$date = date('d-m-Y', mktime(0, 0, 0, $maand, $dag + 10, $jaar));
echo"<p>".$date."</p>";
?>


Met bovenstaand voorbeeld krijg je in mooi formaat de datum over 10 dagen. Zoals ik al eerder opmerkte kun je, als jouw server in een andere tijdzone staat, de tijd met mktime aanpassen. Je begint dan dus, bijvoorbeeld bij een tijdsverschil van 6 uur:
#Code
1
$datum = date('d-m-Y', mktime(-6, 0, 0, $maand, $dag + 10, $jaar));


Speel een beetje met deze functies en je zal zelf doorkrijgen hoe het werkt.

Het grote voordeel van het combineren van deze functies is dus dat er een 'correcte' datum uitkomt: de functie date() in combinatie met mktime() houdt immers rekening met het feit dat niet alle maanden evenveel dagen hebben, maar ook met schrikkeljaren, etc. Iets dat je zelf niet snel voor elkaar krijgt als je zelf functies gaat maken.

Maanden mooi weergeven

We kunnen nu de datum weergeven in de vorm 1-5-2004, maar mooier zou zijn: zaterdag 1 mei 2004. Dan kan ook, als je gebruik gaat maken van arrays. Zo dus:
#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$dag = date('j');
$maand = date('n');
$jaar = date('Y')
$dagvdweek = date('w');

$dagen_array = array( 
      
"zondag", "maandag", "dinsdag", "woensdag", 
      
"donderdag", "vrijdag", "zaterdag"); 
$maanden_array = array( 
      
"januari", "februari", "maart", "april", 
      
"mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"); 
$dag_naam = $dagen_array[$dag]; 
$maand_naam = $maanden_array[$maand-1];
echo"Het is vandaag ".$dag_naam." ".$dag." ".$maand_naam." ".$jaar." ";
?>


Ik hoop dat ik je een idee heb gegeven wat er allemaal kan met de functies date() en mktime(), met je vragen kun je in het forum terecht.

[edit Rogiertje]
eerst beginnen met $datum en echo'en met $date helpt natuurlijk niet
[/edit]

11 reacties
DavDef Geplaatst op 12-04-2013 om 13:58
 

Regular
je stukje code van " maanden mooi weergeven", zal wel niet 100% werken omwille van het volgende:
#Code
1
2
3
$dag = date('j'); 
$dagen_array = array( "zondag", "maandag", "dinsdag", "woensdag", "donderdag","vrijdag", "zaterdag"); 
$dag_naam = $dagen_array[$dag];

met de laatste regel ga je hier trachten om de $dag waarde als index van de $dagen_array te gebruiken. MAAR
wat als je de 15de van de maand bent of de 31ste ? dan ga je de volgende error krijgen :

#Code
1
" Notice: Undefined offset:"

je kan dit wel oplossen doormiddel van dit:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$dag = (date('j'));
$dagX = (date('j'));
$maand = intval(date('n')); 
$jaar = intval(date('Y'));
$dagvdweek = intval(date('w'));

$dagen_array = array( 'zondag', 'maandag','dinsdag','woensdag','donderdag', 'vrijdag', 'zaterdag'); 
$maanden_array = array( 'januari','februari', 'maart', 'april','mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'); 

while( $dagX >= 7)
{    
    $dagX= $dagX - 7;


$dag_naam = $dagen_array[$dagX]; 
$maand_naam = $maanden_array[$maand-1];
echo"Het is vandaag ".$dag_naam." ".$dag." ".$maand_naam." ".$jaar." ";


de while loop zal nagaan of de waarde van $dagX groter is dan 7 (aantal dagen van de week), zo niet, zal hij hier telkens 7 vanaf tellen, tot dat de waarde kleiner is dan 7, en zo overeenkomt met een indexwaarde van de $dagen_array.


cheers :D
takje Geplaatst op 08-04-2007 om 23:00
 

Regular
Je kan ook gewoon $datum = date('r'); invoeren, dan krijg je de dag, maand, jaar, tijd in uren, minuten en seconden en het tijdsverschil met de GMT. (maanden en dagen in het engels)
bass Geplaatst op 18-11-2006 om 16:08
 

Regular
readyornot daar is al een mooi javascript voor zie javascript scripts
arie36 Geplaatst op 08-07-2006 om 09:57
 

Regular
geweldig!
thomsen_php_freak Geplaatst op 08-10-2005 om 14:33
 

Regular
weet iemand hoe je de seconden van date('H-i-s') kan laten doorlopen als de pagina geladen is?

Pagina 1 2 3 

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder