Datum variabele
Met Smarty kun je gemakkelijk werken met datums en tijdstippen, dankzij handige ingebouwde variabelen, functies en modifiers. Dit kun je gebruiken in e-mailtemplates om profielgegevens weer te geven, of in opvolgacties om te bepalen wanneer een actie uitgevoerd moet worden.
De huidige tijd in mailings
De huidige tijd is altijd opgeslagen in de variabele {$smarty.now}. Echter, in mailings wil je meestal verwijzen naar het moment van verzenden, niet naar het openmoment. Hiervoor gebruik je {$timestamp}. Dit is bijvoorbeeld handig voor een kopje als "Nieuwsbrief Maart" in de webversie van een mail. In tegenstelling tot de gewone versie van een e-mail (die in de mailbox staat en niet meer verandert), wordt de webversie van mailings pas samengesteld op het moment dat iemand deze opent. De variabele {$smarty.now} verwijst dan naar de huidige tijd, terwijl {$timestamp} nog altijd het oorspronkelijke verzendmoment bevat.
De huidige tijd in opvolgacties
Een soortgelijk probleem doet zich voor bij opvolgacties. Ook in opvolgacties kun je {$smarty.now} gebruiken om te verwijzen naar de huidige tijd. Maar soms worden opvolgacties met een kleine vertraging uitgevoerd. En je kunt opvolgacties met terugwerkende kracht toepassen op logfiles uit het verleden. Het is daarom vaak aan te raden om in opvolgacties de variabele {$trigger.timestamp}, of verkort {$timestamp}, te gebruiken. Deze variabele verwijst naar het moment dat de gebeurtenis heeft plaatsgevonden.
Profielgegevens gebruiken
Je kunt ook gegevens uit een profiel gebruiken in Smarty-templates. Dit doe je simpelweg door gebruik te maken van dezelfde variabelen die je ergens anders in Smarty al gebruikt, lees er hier meer over. Om bijvoorbeeld de kolom "Geboortedatum" van een profiel in Smarty te gebruiken, schrijf je dus iets als:
{$profile.Geboortedatum} 01-01-2000
Datum objecten
Wanneer je tijdstippen gebruikt in Smarty, werk je vaak met "slimme" datum-objecten. De variabele {$trigger.timestamp} bijvoorbeeld, kun je zowel gebruiken als gewone tekst-variabele, maar je kunt je ook individuele eigenschappen opvragen:
{$trigger.timestamp} # gebruik als string: output 2027-03-22 13:44:11
{$trigger.timestamp.time} # alleen de tijd: output 13:44:11
{$trigger.timestamp.timestamp} # output als "unix timestamp": 1805719451
Je kunt hier meer lezen over deze functionaliteit. Let op dat dit niet werkt met de {$smarty.now} tag, wat al een UNIX timestamp teruggeeft.
Datums weergeven
Wanneer je met een tijdstip werkt in Smarty (zoals met {$smarty.now}), kun je dit in een bepaald formaat weergeven door gebruik te maken van de date_format Smarty modifier. Bijvoorbeeld:
{$smarty.now|date_format}
Het is ook mogelijk om zelf een formaat te specificeren voor deze modifier:
Optie | Omschrijving |
---|---|
%Y | jaar als een decimaal getal inclusief de eeuw |
%y | jaar als een decimaal getal zonder een eeuw (00 tot 99) |
%m | maand als een decimaal getal (01 tot 12) |
%d | dag van de maand als decimaal getal (01 tot 31) |
%H | uur van de dag als decimaal getal (00 tot 23) |
%M | minuut als decimaal getal (00 tot 59) |
%S | seconde als decimaal getal (00 tot 59) |
Hieronder volgen enkele voorbeelden:
{$timestamp|date_format:"%Y-%m-%d"}
{$timestamp|date_format:"%Y-%m-%d %H:%M:%S"}
{$timestamp|date_format:"%d-%m-%y"}
{$timestamp|date_format:"%d-%m-%Y"}
{$timestamp|date_format:"%d-%m-%Y %H:%M:%S"}
Uitkomst:
2020-01-18
2020-01-18 00:00:00
18-01-20
18-01-2020
18-01-2020 00:00:00
Tijd optellen
Als je een tijd wilt toevoegen of afhalen van een datum in je database, kun je de date_mod Smarty-modifier gebruiken. Dit doe je bijvoorbeeld zo:
{$fieldname|date_mod:"3 days"}
In dit voorbeeld wordt er 3 dagen bij de datum in het veld {$fieldname} opgeteld. In plaats van "days" kun je ook andere tijdseenheden gebruiken, zoals:
- years (jaren)
- months (maanden)
- hours (uren)
- minutes (minuten)
- seconds (seconden)
Je kunt ook een negatief getal gebruiken om tijd af te trekken. Bijvoorbeeld, om 3 dagen af te trekken, schrijf je:
{$fieldname|date_mod:"-3 days"}
Het is zelfs mogelijk om verschillende tijdsaanduidingen te combineren. Bijvoorbeeld, als je 3 dagen wilt afhalen, 2 uur wilt optellen en 5 minuten wilt aftrekken, schrijf je:
{$fieldname|date_mod:"-3 days + 2 hours - 5 minutes"}
Daarnaast kun je deze bewerkingen combineren met andere modifiers. Bijvoorbeeld, als je de gemodificeerde datum wilt weergeven in een bepaald formaat, kun je de date_format Smarty-modifier gebruiken:
{$fieldname|date_mod:"3 days"|date_format:"%Y-%m-%d"}
In dit geval wordt 3 dagen bij de datum opgeteld en vervolgens geformatteerd
naar het jaar-maand-dag formaat (%Y-%m-%d
).
Tijd optellen bij huidige datum
In plaats van een tijdsvariabele, kun je natuurlijk ook gebruik maken van {$smarty.now}, of rechtstreeks het tijdsverschil in een van deze modifiers gebruiken. Zo krijg je met de volgende Smarty uitdrukkingen hetzelfde resultaat:
{$smarty.now|date_mod:"2 hours"|date_format:"%Y-%m-%d"}
{"2 hours"|date_format:%Y-%m-%d}
Meer informatie over de Smarty date functie vind je hier.
Tijd aanpassen op een variabele dag
Je kunt ook een specifiek tijdstip instellen op een variabele dag, zoals "morgen" of "volgende maandag". Dit maakt het mogelijk om complexere datums en tijden te creëren. Bijvoorbeeld:
{"tomorrow 09:00"|date_format:"%Y-%m-%d %H:%M:%S"}
In dit voorbeeld wordt de datum en tijd van morgen om 09:00 uur opgehaald en geformatteerd in het formaat jaar-maand-dag uur:minuten:seconden (bijv. 2025-03-08 09:00:00).
Je kunt dit ook gebruiken voor andere dagen, zoals:
{"next monday 11:30"|date_format:"%Y-%m-%d %H:%M:%S"}
Hier wordt de datum en tijd van volgende maandag om 11:30 uur opgehaald en geformatteerd op dezelfde manier. Dit maakt het mogelijk om dynamisch met datums en tijden te werken, zonder dat je handmatig de exacte datum hoeft in te voeren.
Voor een volledig overzicht van de mogelijkheden met dit formaat, kun je hier meer lezen.