Change Date Format Using Velocity Script and Tokens | Community
Skip to main content
Level 2
December 22, 2023
Solved

Change Date Format Using Velocity Script and Tokens

I'm stumped. Been through many articles, even tried ChatGPT to find Velocity Script that changes the date format on a token in an email. I do have an Account field that pulls in the date successfully: {{Company.Renewal Date}}, but in the Mkto standard yyyy-MM-dd, or 2023-12-22. I want it to be MMMM dd, yyyy or December 22, 2023. Velocity script doesn't seem to support Account fields so I had my Sales Ops create a Contact field, {{lead.Account Renewal Date}} to pull in from the Account field. I CAN see this field in the VS objects list. My referring "my.token" in this case is {{my.RenewalDate}} and it "tries" to use the following VS to no avail. 

Appreciate any feedback for fix suggestions.

#set( $dateOptions = { "formats" : { "userin" : "yyyy-MM-dd HH:mm:ss", "userout" : "MMMM d, yyyy 'at' HH:mm:ss z" }, "timezones" : { "userin" : "America/New_York", "userout" : "America/New_York" }, "locale" : $date.getLocale() }) #set( $renewalDatelike = $lead.account_renewal_date__c ) #set( $renewalDate = $convert.parseDate( $renewalDatelike, $dateOptions.formats.userin, $dateOptions.locale, $date.getTimeZone().getTimeZone($dateOptions.timezones.userin) ) ) #set( $renewalDate_formatted = $date.format( $dateOptions.formats.userout, $renewalDate, $dateOptions.locale, $date.getTimeZone().getTimeZone($dateOptions.timezones.userout) ) ) $renewalDate_formatted

 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
SanfordWhiteman
SanfordWhitemanAccepted solution
Level 10
December 27, 2023

You shouldn’t be using formal notation here:

 

#set( $myDate = $convert.parseDate(${lead.Your Token Here},'yyyy-MM-dd',$locale,$inTimeZone) )

 

Always use simple notation unless you’re in an output context:

 

#set( $myDate = $convert.parseDate($lead.Your_Field_Here,'yyyy-MM-dd',$locale,$inTimeZone) )

 

Also, it’s not a “token” in Velocity but the Velocity field name, so I changed the snippet accordingly.

8 replies

Level 4
December 27, 2023

@scott-bush - I did the same thing for a project, and parsed the date in much smaller code. I don't mind sharing - hope this is useful! (I am not familiar with VS best practices, so I'm hoping I can learn some by sharing my code with others! All I know is that this works 😁)

 

#set( $inTimeZone = $date.getTimeZone().getTimeZone('America/New_York') ) #set( $outTimeZone = $date.getTimeZone().getTimeZone('America/New_York') ) #set( $locale = $date.getLocale() ) #set( $myDate = $convert.parseDate(${lead.Your Token Here},'yyyy-MM-dd',$locale,$inTimeZone) ) ${date.format('MMMM dd, yyyy',$myDate,$locale,$outTimeZone)}

 

Translate
Level 2
December 27, 2023

@jacksi1 That DOES work and it tested fine on both a Person view and List view. I had tried your code before but was using an account field - VS seems to require a lead field so I had Sales Ops create a Contact Field that pulls the Contact.Renewal Date into a lead.Account Renewal Date field. I never re-tested with that change. Thanks for jumping in and big thanks to @sanfordwhiteman for striving with me during the holiday season. Here's the code that works for me...

#set( $inTimeZone = $date.getTimeZone().getTimeZone('America/New_York') ) #set( $outTimeZone = $date.getTimeZone().getTimeZone('America/New_York') ) #set( $locale = $date.getLocale() ) #set( $myDate = $convert.parseDate(${lead.Account Renewal Date},'yyyy-MM-dd',$locale,$inTimeZone) ) ${date.format('MMMM dd, yyyy',$myDate,$locale,$outTimeZone)}

  

Translate
Level 4
December 27, 2023

Great! I would make sure that it works when you send yourself a full e-mail (not through the 'Send Sample' capability). It should be fine, and the code works for me, but... measure twice cut once right? 😉

Translate
SanfordWhiteman
Level 10
December 22, 2023

Please remember to use the Syntax Highlighter (“Insert/Edit Code Sample”) so code is readable. I edited your post this time.

 

The problem is your formats don’t correctly describe your input and output.

 

The input is an ISO Date (yyyy-MM-dd) and your desired output doesn’t include the time, so you want:

#set( $dateOptions = { "formats" : { "userin" : "yyyy-MM-dd", "userout" : "MMMM d, yyyy" }, "timezones" : { "userin" : "America/New_York", "userout" : "America/New_York" }, "locale" : $date.getLocale() })

 

Translate
Level 2
December 22, 2023

In a preview test, the output is $renewalDate_formatted - it didn't express the date.

Translate
SanfordWhiteman
Level 10
December 23, 2023

Gonna need more info than that. Note you have to use Preview By List to correctly target a lead.

 

Please show the output of

 

${lead}

 

 

When I set $lead.account_renewal_date__c to a standard ISO date (yyyy-MM-dd) the output looks fine.

Translate