Datum und wie man damit rechnet

eZ publish
17.06.2014

Viele Programmiersprachen und auch viele Templatesprachen haben so ihre Eigenheiten, wie mit dem Datum umgegangen werden kann.

Zwar ist das Datum ein wichtiger Bestandteil vieler Informationen, die über das Zwischennetz Verbreitung finden, für Entwickler ist der richtige Umgang damit oft eine echte Herausforderung.

Will man etwa Artikel aus der Datenbank holen, die vor einem Monat publiziert wurden, dann möchte man gerne eine Abfrage in dieser Form erstellen:

{def $nodes=fetch( 'content', 'tree',
  hash( 'parent_node_id', 2,
    'class_filter_type', 'include',
    'class_filter_array', array('article'),
    'attribute_filter', array(
      array('article/date_free', '>', $last_month)
     ),
    )
)}

Ein Traum wäre natürlich eine einfache Funktion in der Art:

{def $date_start=currentdate()|sub(1 month)}

Das ergibt natürlich Quatsch, weil das nicht so vorgesehen ist. Funktionierende Lösungen muten in ihrer Komplexität schnell nach höheren Weihen der Programmierkunst an, sind allerdings eher umständliche Krücken, um selbstverständliches zu ermöglichen.

Da wäre einmal die PHP Variante:

$last_month = date('d/m/y', strtotime('10/01/2014 - 1 month'));

Wobei natürlich '10/01/2014' auch erst noch ermittelt werden muss. Aber wer will schon was mit PHP bauen, wenn er gerade im Template zumfuhrwerkt.

Also zu den Lösungen im Template:

{def $now = currentdate()}
{def $tommorow = $now|sum( 86400 )}

Oder so:

{$date = currentdate()|sum(mul(60,60,24,1))|l10n( 'shortdate' )}

Hoi, da muss dann jeweils nachgerechnet oder recherchiert werden, welche Zahl jetzt wo eingetragen werden muss. Auch sollte man sich nicht allzusehr davon stören lassen, dass damit lediglich ein Näherungswert erreicht wird. Denn man muss sich mit sich auf eine Anzahl Tage einigen, die den persönlichen Bedürfnissen am nächsten kommt. Eine Unterscheidung von 30/31 tägigen Monaten ist damit noch nicht möglich und der Februar...

Eine letzte Möglichkeit noch. Sieht zwar beim ersten Blick am kompliziertesten aus, stellt sich beim zweiten jedoch als einfach nachvollziehbar dar:

{def $date=currentdate()}
{def $date_month = $date|datetime('custom', '%n')|sub(1)}
{def $date_day = $date|datetime('custom', '%j')}
{set $last_month = makedate($date_month, $date_day)}

Und vor allem: Da wird wirklich ein Monat abgezogen und nicht eine beliebig ermittelte Zeitspanne.

comments powered by Disqus

AfD

Keine Alternative für Deutschland

Alternative für Deutschland

Lange wurde gerätselt, für was außer der Abschaffung des Euro die Alternative für Deutschland (AfD) steht.
Ein wenig Wirtschaftsliberalismus, um Wähler von der FDP abzugreifen. Ein wenig konservatives Gehabe um im Klientel der Union zu wildern.

A ? B C D E F G H I J K L M N O P Q R S T U V W Z