Werken met data en tijden

Een database is uitermate geschikt om te werken met data en tijden. Het rekenen met deze gegevens is in de database heel gemakkelijk. Vandaar ook dat we dit zoveel mogelijk aan de database willen overlaten.

Om goed te kunnen werken met data en tijden is het van belang dat je het juiste datatype kiest voor deze gegevens. Een datum sla je op in een DATE veld, een tijd in een TIME veld en een combinatie van een datum en tijd komt in een DATETIME veld te staan.

Opmerking: deze datatypen zijn specifiek voor MySQL. Andere databases kennen weer andere datatypes voor data en tijden.

Formatteren van een datum (SQL)
De geboortedatum van onze werknemers staat nu in het formaat yyyy-mm-dd in de tabel, overigens het enige geldige formaat voor een datum. Maar de kans is groot dat we de datum niet in dit formaat op het scherm willen zetten.

Met behulp van de MySQL functie DATE_FORMAT() kunnen we daarom het formaat van de datum aanpassen bij het selecteren van de gegevens. Dit doen we als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT
    voornaam,
    DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
    werknemers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
+----------+------------+
| voornaam | newDate    |
+----------+------------+
| Nico     | 24-03-1958 |
| Tim      | 30-01-1982 |
| Pim      | 20-12-1980 |
| Joost    | 20-10-1974 |
| Thomas   | 12-06-1970 |
| Niels    | 18-08-1979 |
+----------+------------+

De functie DATE_FORMAT() accepteert twee parameters. Allereerst de kolom waarin de datum opgeslagen is en ten tweede het formaat waarin de datum gezet moet worden. Een overzicht met alle parameters die je daarin kunt gebruiken zijn te vinden in de MySQL handleiding.

Nadat je de functie toegepast hebt, geef je dat gegeven een alias. Op die manier kun je hem selecteren in de resultaat set. Zorg dat je de naam van de alias niet hetzelfde kiest als een bestaande kolomnaam, aangezien dat verderop in de query problemen kan opleveren.

In de output zien we dat de datum nu inderdaad in het nieuwe formaat weergegeven wordt.

Formatteren van een datum (PHP)
Als we dit willen gebruiken in PHP verandert er natuurlijk niets aan de query. Het zal er dus als volgt uit komen te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require_once 'db_config.php';

$sql = "
    SELECT
        voornaam,
        DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
    FROM
        werknemers
"
;

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

elseif(mysql_num_rows($res) == 0)
{

    echo 'Geen records gevonden.';
}

else
{
    while($row = mysql_fetch_assoc($res))
    {

        echo $row['voornaam'].' ('.$row['newDate'].') <br />';
    }
}

?>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Nico (24-03-1958)
Tim (30-01-1982)
Pim (20-12-1980)
Joost (20-10-1974)
Thomas (12-06-1970)
Niels (18-08-1979)

Rekenen met data en tijden (SQL)
Het is mogelijk om de geboortedatum kolom op te nemen in een WHERE clausule en er een vergelijking mee uit te voeren. Stel dat we bijvoorbeeld de werknemers op willen halen die na 1 januari 1980 geboren zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    voornaam,
    DATE_FORMAT(geboortedatum, '%d-%m-%Y') AS newDate
FROM
    werknemers
WHERE
    geboortedatum > '1980-01-01'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+----------+------------+
| voornaam | newDate    |
+----------+------------+
| Tim      | 30-01-1982 |
| Pim      | 20-12-1980 |
+----------+------------+

Zoals verwacht zijn in de output alleen de gegevens van de werknemers, die in 1980 of later geboren zijn, te zien.

Huidige datum en tijd (SQL)
MySQL kent een tweetal functies die de de huidige datum en tijd teruggeven. De functie NOW() geeft een datumtijd-stempel terug waarin dus zowel een datum als tijd te vinden zijn. De functie CURDATE() geeft enkel de huidige datum terug.

De gebruik ervan in de query is bijvoorbeeld als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
INSERT INTO tabel
(
    datumtijdveld,
    naam
)
VALUES
(
    NOW(),
    'Jan'
)

Op deze manier zou je dus de huidige datumtijd-stempel in kunnen voegen in de database. Ga dus niet meer in PHP met de date() functie aan de gang, dit is veel makkelijker.

Meer datum- en tijdfuncties
De toepassingen van het rekenen met data en tijdens die ik hier heb laten zien, zijn nog maar een klein topje van een hele grote ijsberg. Dit onderwerp is veel te uitgebreid om hier te bespreken, dus wil ik je graag doorverwijzen naar een van de volgende links:

Datum- en tijdfunctie in MySQL (tutorial)
MySQL handleiding

« Lees de omschrijving en reacties

 
 

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.