Date & Time Handling

Dealing with dates & times can be tricky, but Flow XO has some built-in logic that should make manipulating dates as painless as possible.

The Date/Time Field

A date/time field is a service input field that expects a date (and sometimes a time too). You'll recognise them because of the date/time picker, and the link to this article. Here's an example:

The field is like any other in Flow XO - it can accept some predefined text, or you can drag a property from a previous task on the right hand side of the screen and drop into the field. You can of course use a combination of an output property and some extra text.

Recognised Formats

Most services that output dates in Flow XO do so in ISO 8601 format (although we do omit the T and Z from the format), and that's how our date/time fields prefer to receive dates & times (although they are quite forgiving, as you'll see in a moment). An ISO 8601 date/time looks like this:

2015-01-18 18:31:50

You'll see that's a date in the format yyyy-mm-dd, then a space, followed by the time in hh:mm:ss format. If you provide a date/time like this, you can be certain that it will be dealt with consistently.

However, we'll try our best to interpret any date/time we receive, regardless of the format. So you can throw any of these formats at us and we should be able to deal with them:

  • now
  • today
  • tomorrow
  • next week
  • next month
  • next year
  • 11pm
  • 11:30pm
  • 23:30
  • Friday, January 9th 2015
  • January 9th 2015
  • friday at 10am
  • this friday at 10am
  • next friday at 10am
  • may 25th of next year
  • 2014-01-18 09:30:00
  • 2014-01-18 09:30:00 -0400

If we don't recognise the date/time, it's equivalent to leaving the field empty - i.e. we won't send any date/time across. Of course, that might cause an error, so you need to make sure that if the field is required there will always be a valid date in it.

There's actually a fairly limitless number of acceptable date formats. To see how your date/time is interpreted, you can type it into this form to see (note that this checker doesn't prefer the future when date/times are ambiguous, see the next section for details).

Ambiguity

We prefer the future when there's ambiguity about a date/time. For example, we take 10:00 to mean the next time it will be 10am (either today or tomorrow), rather than always 10am today.

For example, if it's currently 9am and you use the date/time 10:00, we'll assume you mean 10am today. If it's 3pm and you use that, we'll take that to mean 10am tomorrow.

You can always use:

  • today 10:00
  • tomorrow 10:00

These are unambiguous and will always be taken literally.

Offsetting Your Date/Time

You'll often want to 'offset' your date/time by a number of days, hours or and/or minutes. For example, if your flow is triggered by a new event in a calendar, you might want to create a task in your CRM 1 hour before the event's date/time. For that, you can use a modifier -1h:

{{new_event_in_calendar.event_due}} -1h

There's 3 different offsets you can use in combination. These are d (days), h (hours) and m (minutes). Some examples of valid offsets:

  • +1d (1 day in the future)
  • -3h -30m (3 hours, 30 minutes in the past)
  • +2d +12h +10m (2 days, 12 hours and 10 minutes in the future)

Important: Make sure you stick exactly to this format otherwise your offset won't be recognised. There must be a space between your date and each offset, and you must use a single whole number as your offset (not a decimal).

These are examples of invalid offsets:

  • +0.5d (use +12h to express half a day instead)
  • {{service.date}}-1h (always use a space between the date and the offset, {{service.date}} -1h)
  • +1d+2h (use a space between the offsets, +1d +2h)
  • +5days (days isn't recognised, always use +5d)

Timezones

Dates and times are processed and output in the timezone set at the account level, except where a timezone offset is provided as part of the date (for example, -05:00 or +0100).

Examples

Remember you can use outputs from previous tasks, fixed dates, or a combination of those in date/time fields. Here are some valid date/times:

  • {{service.date}} (use an output from another field directly as an input)
  • 2015-07-01 (a fixed date, useful if you have an upcoming event that you want to run your flow around)
  • 2015-07-01 13:00:00 -0500 (a fixed date & time, including a timezone offset)
  • {{service.date}} 17:00:00 (a combination of an output for date and fixed time)
  • {{service.date}} -2h (2 hours before a date/time from an output)
  • {{service.year}}-{{service.month}}-{{service.day}} (a date made up of 3 outputs for year, month and day

Still need help? Contact Us Contact Us