Freemarker/Velocity - Datum-manipulation
Ich habe eine ziemlich einfache Frage zu diesen 2 templating engines.
Ich bin versucht zu machen, eine Zukunft/Vergangenheit Tag, zu einer festen Zeit, z.B. 18 Monaten oder morgen.
Ich weiß, dass es möglich ist dies mit einem java-date-Objekt innerhalb einer velocity/freemarker-Vorlage (so etwas wie $date.add(2,-18)
), aber ich möchte dies tun mit DateTool oder freemarker Kern.
Dies ist etwas, das sehe ich als Reine Präsentations - (man denke nur an die Standard-Termine, die Sie sehen, im Flug Buchungs-Formen), so kann ich keinen Grund sehen, warum eine Template-engine sollte nicht in der Lage, dies zu tun.
Ist es trotzdem möglich? Wenn ja, wie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Velocity-Tools gibt es keine solche Methode.
Ich weiß dieser post ist sehr alt, aber für die Menschen aus der Zukunft immer noch auf der Suche nach einer Antwort: die manipulation von Datum getan werden kann, konvertieren von Daten zu/von Millisekunden:
würde zum Beispiel subtrahieren Sie 18 Tage aus
mydate
. (Beachten Sie, dass 86400000 ein, ist die Höhe der Millisekunden pro Tag)?long
ist nicht dokumentiert Datum vordefiniert, es ist auf der Experten gelieferten Seite: freemarker.apache.org/docs/ref_builtins_expert.htmlFür freemarker, vielleicht : Built-ins für Termine.
Können Sie tun es in der Geschwindigkeit zu, aber nicht mit der DateTool (gehört der Velocity-Extras sowieso).
Ist es eine gute Praxis, um eine "Format" - Objekt mit verschiedenen Dienstprogrammen, die sind praktisch für Präsentations-Zwecke nur (Sie können die verschiedenen frameworks, die Verwendung Geschwindigkeit, wie Sie "Format" - Objekte).
Also würde der code so Aussehen $ - format.dateFromNow(), und da wäre noch eine Präsentations-Ansatz.
Fand ich, dass pro @Stefan Haberl,
?lang
- erlaubt arbeiten auf Termin, um den gleichen Wert wiejava.util.Datum.getTime()
alsLong
. Allerdings brauchte ich ein wenig mehr Erklärung vergleichen zu können, Termine oder Termine ändern.Hier ist der Kern:
?long
=java.util.Date.getTime()
Epoche gibt die Zeit in MillisekundenIch arbeite gerne in Sekunden, statt Millisekunden (weniger unnötige Nullen, ich kümmern sich nicht darum, Millisekunden, etc.), die sieht wie folgt aus:
Zu diesem Zeitpunkt
86400
= 1 Tag (da wir in "Sekunden" jetzt), so kannst du einfach addieren/subtrahieren, die zum Bearbeiten des Datums.Nun, wenn ich will, um ein Datum zurück aus der Unix-format (in Sekunden), kann ich konvertieren Sie wieder mit den
?number_to_date
builtinHinweis: ich bin offen für änderungen/Verbesserungen, wie ich bin nicht sicher, warum viel dieses war erforderlich \_(ツ)_/
Schreiben Sie Ihre eigenen Methoden verwenden, die in FreeMarker:
http://freemarker.sourceforge.net/docs/pgui_datamodel_method.html
bauen DataAddMethod, der ausgeführt wird, diese Logik.