Wir organisieren uns die benötigten Werte

#set($strid = $DC.getRecId())
#set($array = [])
#set($statement = $PreparedQuery.prepare($DbConnection, "SELECT DT_DATUM FROM DATAGROUP('<DATAGROUP_GUID>') WHERE FKSTRID = ?"))
$statement.setString(1, $strid)

#set($rs = $statement.executeQuery())
#foreach($element in $rs)
	#set($intYear = $element.getDateValue(1).getYear() + 1900)
	#set($intMonth = $element.getDateValue(1).getMonth())
	#set($ignoreValue = $array.add($element.getDateValue(1)))
#end
$rs.close()
$statement.close()
Code language: C++ (cpp)

Wir haben den Elterndatensatz aufgerufen und holen uns erstmal die RecId (die kann man ja immer mal gebrauchen), mit der wie die relevanten Daten aus der Kind-Datengruppe holen. Dabei holen wir uns auch gleich das Jahr und den Monat des geholten Datumwertes. Es ist vollkommen ok, dass wir das immer wieder überschreiben, da es ja immer der gleiche Wert ist. Sicherlich hätten wir das auch aus dem Elterndatensatz holen können, aber so sind wir einfach sauberer.
Den Datumswert selbst schreiben wir in ein Array, das wir in Zeile 2 initialisieren. Weil die Funktion aber einen Rückgabewert hat, speichern wir den auf der Variablen $ignoreValue, die wir fortan ignorieren werden (benennt eure Variablen sinnvoll!)

#set($intNextMonth = $intMonth + 1)
#set($dtFirst = $DtUtil.date($intYear, $intMonth, 1, $User.getTimeZone()))
#set($dtLast = $DtUtil.date($intYear, $intNextMonth, 0, $User.getTimeZone()))

#set($intBefore = $dtFirst.getDay())
#set($intAfter = $dtLast.getDay())

#set($range = [$TextUtil.parseInt($dtFirst.format('d'))..$TextUtil.parseInt($dtLast.format('d'))])
Code language: PHP (php)

Jetzt wird es spannend, Freunde! Wir können nämlich die schwierigen Dinge alle von der Velocity-Datums-API erledigen lassen. Es kitzelt mir manchmal einfach den Hirnstamm, wie gut die eigentlich ist.

Zunächst holen wir uns den nächsten Monat, indem wir den zuvor ermittelten Monat um 1 erhöhen. Ja, das kann auch mal eine 13 werden, aber die Großartigkeit des $DtUtil macht es uns an dieser Stelle einfach, da wir beim erzeugen eines Datumswertes auch direkt ein bisschen herumrechnen können. In Zeile 2 und 3 holen wir uns nämlich den ersten und letzten Tag des Monats, indem wir aus dem ermittelten Jahr ($intYear), dem entsprechenden Monat ($intMonth bzw. $intNextMonth) und einem festen Tag ein Datum erzeugen. Der 13. Monat wäre also wieder der Januar des darauffolgenden Jahres und der nullte Tag ist der letzte Tag des vorherigen Monats.

In Zeile 5 und 6 bestimmen wir mit .getDay() die Wochentage dieser Datumswerte. Hier muss man aufpassen, da die Woche in der Velocity-Denke mit dem Sonntag beginnt, wir uns jetzt aber schon auf den Montag geeinigt haben. Das hätte man sicherlich anpassen können, aber…

Die 8. Zeile ist vielleicht ein bisschen schwierig, aber ich versuche mal zu erklären, was hier passiert. Wir brauchen nämlich eine Range, die wir später noch durchiterieren werden. Nun kann so ein Monat aber durchaus auch unterschiedlich viele Tage haben, also formatieren wir uns das Datum des ersten Tag des Monats so, dass uns nur der Tag des Monats zurück gegeben wird (.format(‘d’) gibt also eine Zahl zwischen 1 und 31 zurück). Anschließend wandeln wir das in ein Integer um, weil wir das so zu Iteration brauchen. Das gleiche nochmal für den letzten Tag, getrennt von zwei Punkten, umgeben von ekigen Klammern – fertig ist die Range. Im Grunde könnte da also auch [1..30] stehen. Und das benutzen wir nun, um uns einen Kalender zu basteln. Seid ihr schon aufgeregt?

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hallo! Mein Name ist Marco Friedersdorf und bin Freelancer im Bereich der Software-Entwicklung und IT-Beratung. Mit Artikeln wie diesem möchte ich einen kleinen Einblick in meine Arbeit geben und über die Dinge sprechen, die mich als Informatiker beschäftigen.
tripadvisor flickr americanexpress bandcamp basecamp behance bigcartel bitbucket blogger codepen compropago digg dribbble dropbox ello etsy eventbrite evernote facebook feedly github gitlab goodreads googleplus instagram kickstarter lastfm line linkedin mailchimp mastercard medium meetup messenger mixcloud paypal periscope pinterest quora reddit rss runkeeper shopify signal sinaweibo skype slack snapchat soundcloud sourceforge spotify stackoverflow stripe stumbleupon trello tumblr twitch twitter uber vimeo vine visa vsco wechat whatsapp wheniwork wordpress xero xing yelp youtube zerply zillow px aboutme airbnb amazon pencil envelope bubble magnifier cross menu arrow-up arrow-down arrow-left arrow-right envelope-o caret-down caret-up caret-left caret-right