Skip to content

Format Dates

Transform

Parse date columns and reformat them to a chosen output format such as YYYY-MM-DD, MM/DD/YYYY, ISO 8601, or Unix timestamp. Each rule targets one column. Unparseable values are kept as-is rather than dropped, so the transform is safe to run on dirty input. Use it to normalize date formats coming from different sources before joining or comparing rows.

Format Dates is a streaming transform: each row is processed independently. For each configured column, the cell value is parsed into a JavaScript Date and then formatted to the target output format.

Parsing is delegated to JavaScript’s built-in new Date(string) for inputFormat: "auto" and ISO 8601 strings, and to a digits-only Unix-timestamp shortcut for purely numeric values. There is no custom parser for region-specific formats — values that new Date(...) cannot understand fall back to being kept unchanged.

Output is always written as a string, even when the format is Unix timestamp (which writes the integer seconds as a string). Empty cells ("", null, undefined) pass through untouched.

If no column formats are configured, all rows pass through unchanged.

Input: One tabular data connection. Output: The same rows with the targeted columns reformatted to strings in the chosen format.

A list of column-specific format rules. Each rule reformats one column.

FieldTypeDescriptionDefault
columnstringColumn name to format. Required, non-empty.(none)
inputFormatstringCurrently only "auto" and "ISO8601" actively change parsing behavior; both delegate to new Date(). Other values are accepted but ignored by the parser."auto"
outputFormatenumOne of: YYYY-MM-DD, MM/DD/YYYY, DD/MM/YYYY, YYYY-MM-DD HH:mm:ss, MM/DD/YYYY HH:mm:ss, DD/MM/YYYY HH:mm:ss, ISO8601, Unix timestamp, Custom.(required)
customFormatstringRequired when outputFormat: "Custom". Supports tokens YYYY, MM, DD, HH, mm, ss.(none)
timezonestringReserved for future use; currently has no effect on output. Date components are taken from the JavaScript runtime’s local timezone.(none)

A signup_date column comes in as MM/DD/YYYY and you want YYYY-MM-DD for downstream consumers.

Before:

customersignup_date
Alice Anderson03/15/2024
Bob Brown11/02/2024
Carol Chen01/18/2025

Configuration: column: signup_date, inputFormat: auto, outputFormat: YYYY-MM-DD.

After:

customersignup_date
Alice Anderson2024-03-15
Bob Brown2024-11-02
Carol Chen2025-01-18

Reformat ISO datetimes to date-and-time strings

Section titled “Reformat ISO datetimes to date-and-time strings”

The source has full ISO datetimes; you want a human-friendly YYYY-MM-DD HH:mm:ss form.

Before:

event_idrecorded_at
evt-10012025-04-10T08:30:00
evt-10022025-04-10T14:05:42
evt-10032025-04-11T22:15:00

Configuration: column: recorded_at, inputFormat: auto, outputFormat: YYYY-MM-DD HH:mm:ss.

After:

event_idrecorded_at
evt-10012025-04-10 08:30:00
evt-10022025-04-10 14:05:42
evt-10032025-04-11 22:15:00

A messy due_date column has good ISO dates, blanks, and unparseable strings. The transform formats what it can and leaves the rest alone.

Before:

task_iddue_date
t-12026-02-14T09:00:00
t-2tbd
t-3
t-42026-03-01T17:30:00

Configuration: column: due_date, inputFormat: auto, outputFormat: YYYY-MM-DD.

After:

task_iddue_date
t-12026-02-14
t-2tbd
t-3
t-42026-03-01
  • Parsing is whatever new Date(string) accepts, with one Unix-timestamp shortcut. All-digit strings are treated as Unix timestamps (seconds if below 10^10, milliseconds otherwise); everything else goes through new Date(). Region-ambiguous formats like 15/03/2024 (DD/MM/YYYY) parse as Invalid Date in V8 and are kept as-is. The inputFormat field is mostly informational today — only auto and ISO8601 change the parser path. See apps/web/src/transforms/format-dates/logic.ts:25-58.
  • Output uses local timezone components. When the input is a date-only string like "2024-03-12", JavaScript parses it as UTC midnight, then getFullYear/Month/Date reads the local-time view. In timezones west of UTC, this can shift the date back by one day. To avoid surprises, store source dates with explicit time and timezone (e.g. "2024-03-12T12:00:00Z") before formatting. See apps/web/src/transforms/format-dates/logic.ts:69-74.
  • Unparseable non-empty values keep their original value, not null or empty. This is intentional — the transform is forgiving so a stray free-text entry doesn’t kill the row. Failures are logged via the execution logger but do not become row errors. If you need failures to surface as blanks instead, follow with Replace Values targeted at the bad strings.
  • Change Type — convert dates to/from native Date types instead of just reformatting strings.
  • Replace Values — clean up known-bad date strings before formatting (e.g. strip tbd markers).
  • Filter Rows — drop rows whose date column is empty or unparseable rather than passing them through.