Kernelement der PRO-Version meines WordPress-Plugins JSON Content Importer ist die Template-Engine twig, die auch in Symfony2-PHP-Framework zum einsatz kommt. Von Haus aus kann twig schon einiges, manches leider aber nicht.
Konkret vermisste ich die Mögichkeit, Datum- und Zeitangaben möglichst flexibel einzustellen. Denn ein niederländischer Kunde meines Plugins wollte die niederländische Wochentags-Bezeichnung anzeigen. Damit das möglich ist, habe ich eine Erweiterung für twig geschrieben, die in Aktion wie folgt aussieht:
{{ zeit | dateformat('%A %m/%d/%y %H:%M:%S', 'Europe/Berlin', 'nl_NL') }}
Das Ergebnis kann man hier sehen: Die Namen der Wochentage sind in niederländischer Sprache angezeigt.
„zeit“ steht dabei für das Feld mit der Datumsangabe im JSON-Feed. die Pipe „|“ bewirkt, dass der folgende Code auf dieses Feld angewendet wird.
Dieser Code ist die Funktion „dateformat“ die wie folgt aussieht:
$twig_extra_filter_dateformat = new Twig_SimpleFilter('dateformat', function ($data, $dateformatstr, $datetimezone, $datelocale) { $curentTimezone = date_default_timezone_get(); date_default_timezone_set($datetimezone); $validDateLocale = FALSE; if (preg_match("/([a-z_]*)/i", $datelocale)) { $validDateLocale = TRUE; } if ($validDateLocale) { $getlocale = setlocale (LC_TIME,"0"); setlocale(LC_TIME, $datelocale); } if (!( is_numeric($data) && (int)$data == $data )) { $data = strtotime($data); } $formattedDate = strftime($dateformatstr, $data); if ($validDateLocale) { setlocale(LC_TIME, getlocale); } date_default_timezone_set($curentTimezone); return $formattedDate; });
$data enthält „ziel“, die drei Argumente sind:
- $dateformatstr, z. B. ‚%A %m/%d/%y %H:%M:%S‘: Formatierung des anzuzeigenden Datums gemäß PHP strftime
- $datetimezone, z. B. ‚Europe/Berlin‘: PHP-Zeitzone
- $datelocale, z., B. ’nl_NL‘: PHP Locale für die anzuzeigende Sprache