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

Star Wars

Star Wars

at-rt

George Lucas hatte nach dem dritten Star Wars Film verkündet, die technischen Möglichkeiten seien noch nicht weit genug entwickelt, um die von Ihm erträumten, weiteren Filme zu realisieren.

Jahre später wusste man, es waren nicht die technischen Möglichkeiten, es war die fehlende Geschichte.

Zwar fehlte die Geschichte immer noch, als dann weitere drei Filme aus der Traufe gehoben wurden. Was jedoch nicht fehlte, war die Möglichkeit, mit Merchandise-Artikeln Kinder glücklich und Eltern pleite zu machen.

Irgendwann kommt dann der Augenblick, in dem aus einem Kinderzimmer ein Jugendzimmer wird und all die schönen, teuren Sternenjäger aufs Altenteil geschickt werden.

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