Mastering Timestamps in Shopify Flow Emails: Get Accurate Form Submission Times & Handle Timezones
Hey there, fellow store owners! Navigating the ins and outs of Shopify Flow can sometimes feel like solving a little puzzle, especially when you're trying to get specific data points just right for your internal processes. Recently, I stumbled upon a really insightful discussion in the Shopify Community forums that tackled a common head-scratcher: how to accurately capture and display the exact submission time of a form in your internal Shopify Flow emails.
It all started with a question from a store owner, let's call him Thomas (hello_3340 in the forums), who was using Shopify Forms and Flow to send internal email notifications whenever a customer filled out a form. Thomas wanted to include the full timestamp – date and time (hh:mm) – in these emails, but was running into a bit of a wall. He knew about the metaobject.formSubmittedAt variable, which correctly gave him the date, but the time portion was stubbornly showing up as 00:00.
The Case of the Missing Time: Why formSubmittedAt Showed 00:00
Initially, a helpful community expert, Moeed, suggested using the Liquid date filter with a specific format string, like {{ metaobject.formSubmittedAt | date: "%Y-%m-%d %H:%M" }}. This is a standard Liquid approach for formatting dates and times, and it usually works like a charm. However, Thomas quickly replied that while the date was perfect, the time remained 00:00. Frustrating, right?
Moeed quickly jumped back in with the crucial insight: this wasn't a problem with the Liquid filter itself, but rather a quirk of how Shopify Forms sometimes stores the formSubmittedAt field. It can occasionally be stored as a date-only field, even though it technically contains a full ISO 8601 timestamp. So, even if you ask for the time, if the source data is effectively "date-only," you'll just get zeros for the time component.
The Clever Workaround: Using Flow's "Now"
This is where the community discussion really shined, providing a fantastic workaround that's both simple and incredibly effective. Moeed's suggestion was to bypass the potentially date-only formSubmittedAt field altogether and instead use the current runtime of the Flow itself. Since Shopify Flow triggers almost instantly after a form submission, the Flow's "now" timestamp is practically identical to the submission time.
Here's how to implement this in your Shopify Flow email template:
Open your Shopify Flow: Navigate to the Flow where you send your internal form submission email.
Edit the "Send internal email" action: Locate the action that sends the email and click to edit its content.
Replace your existing timestamp variable: Find where you're currently trying to display the submission date/time (e.g.,
{{ metaobject.formSubmittedAt | date: "%Y-%m-%d %H:%M" }}).Insert the "now" Liquid snippet: Replace it with the following code:
{{ "now" | date: "%Y-%m-%d %H:%M" }}This snippet tells Liquid to grab the current time when the Flow runs and format it as
YYYY-MM-DD HH:MM. You can, of course, adjust the format string (e.g.,"%B %d, %Y at %H:%M"for "May 14, 2026 at 14:32") to suit your preferences.Save your Flow: Don't forget to save your changes!
Thomas confirmed this solution worked perfectly for getting the actual time component!
Navigating Timezones: The Daylight Saving Time Dance
Another excellent point raised by Thomas was about displaying the time in a specific timezone, like CET/CEST. This is a common requirement for store owners operating across different regions or simply wanting their internal notifications to reflect their local time.
Moeed explained that Shopify Flow doesn't have a native timezone filter, which means you can't just tell it "display this in CET." Instead, you have to manually apply an offset. For Central European Time (CET), it's UTC+1, and for Central European Summer Time (CEST), it's UTC+2. This introduces the familiar challenge of Daylight Saving Time (DST).
How to Handle Timezone Offsets in Shopify Flow:
Determine your offset: Figure out how many hours your desired timezone is ahead or behind UTC. For CET/CEST, it's either +1 or +2 hours.
Apply the
date_plusfilter: You can add hours to the "now" timestamp using thedate_plusfilter. For example, to display CEST (UTC+2), you'd use:{{ "now" | date_plus: "2 hours" | date: "%Y-%m-%d %H:%M" }}If you needed CET (winter time), you'd change
"2 hours"to"1 hour".
Now, about DST. Since Flow doesn't automatically account for it, you have a few pragmatic options:
Pick one offset: For internal notifications, you might decide to stick with one offset (e.g.,
"2 hours"for CEST) and simply accept that for half the year, the time might be an hour off. For many internal purposes, this level of precision is perfectly acceptable, as Thomas himself noted.Manual adjustment: The most straightforward approach is to manually update your Flow twice a year when DST changes. It's a quick edit and ensures accuracy.
Conditional logic (advanced): For those who love a challenge, you could theoretically build conditional logic within your Flow based on the current date to switch between
"1 hour"and"2 hours". However, this adds complexity and might be overkill for a simple internal email.
Ultimately, Thomas found that accepting the potential one-hour discrepancy for half the year, or manually adjusting the offset twice a year, was a perfectly "good enough" solution for his needs. This really highlights a key takeaway from many community discussions: sometimes, the most pragmatic solution that gets the job done without over-engineering is the best one, especially for internal tools.
So, if you've been struggling to get those precise timestamps into your Shopify Flow emails for form submissions, remember these tricks. Using "now" for accurate time capture and manually managing timezone offsets with date_plus can save you a lot of headache and keep your internal communications flowing smoothly. It's a great example of how tapping into the collective wisdom of the Shopify community can unlock elegant solutions to seemingly tricky problems!