Tips

PHP de juiste manier: Nederlandse datums

Het vertalen van datums binnen PHP kan lastig zijn. Het probleem is dat de DateTime class en date() functie geen ondersteuning bieden voor meertaligheid. Hierdoor moet er gebruik worden gemaakt van alternatieve functies binnen PHP om de datum te kunnen vertalen naar het Nederland. In deze post laat ik drie methodes zien om datums te vertalen naar het Nederlands.

Vertalen met een array

Om af te trappen beginnen we met een de meeste simpele manier. Met het vervangen van de Engelse teksten naar het Nederland door middel van een array.

$months = [
    'January' => 'januari',
    'February' => 'februari',
    'March' => 'maart',
    'April' => 'april',
    'May' => 'mei',
    'June' => 'juni',
    'July' => 'juli',
    'August' => 'augustus',
    'September' => 'september',
    'October' => 'oktober',
    'November' => 'november',
    'December' => 'december'
];

$weekdays = [
    'Monday' => 'maandag',
    'Tuesday' => 'dinsdag',
    'Wednesday' => 'woensdag',
    'Thursday' => 'donderdag',
    'Friday' => 'vrijdag',
    'Saturday' => 'zaterdag',
    'Sunday' => 'zondag'
];
// Sunday 9 April 2017 17:40:09
$datetime = date('l j F Y H:i:s');
$datetime = str_replace(array_keys($months),   array_values($months),   $datetime);
$datetime = str_replace(array_keys($weekdays), array_values($weekdays), $datetime);
// zondag 9 april 2017 17:40:09
echo $datetime;

Vertalen met strftime()

Een andere manier om datums te vertalen is met de functie strftime. Deze methode is een van de meeste gebruikte, waarmee vertalen van datums mogelijk is.

setlocale(LC_ALL, "nl_NL");
// zondag 9 april 2017 17:40:09
echo strftime("%A %e %B %Y %T");

Datums vertalen met IntlDateFormatter()

Tot slot een alternatieve manier voor het vertalen van datums naar het Nederlands. In tegenstelling tot bovenstaande functie is het met IntlDateFormatter mogelijk om gebruik te maken van de DateTime class.

$fmt = new IntlDateFormatter(
    "nl_NL",
    IntlDateFormatter::FULL,
    IntlDateFormatter::MEDIUM,
    'Europe/Amsterdam',
    IntlDateFormatter::GREGORIAN
);

// zondag 9 april 2017 17:40:09
echo $fmt->format(new DateTime);