Format Dates
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.
How it works
Section titled “How it works”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.
Options
Section titled “Options”Column Formats
Section titled “Column Formats”A list of column-specific format rules. Each rule reformats one column.
| Field | Type | Description | Default |
|---|---|---|---|
column | string | Column name to format. Required, non-empty. | (none) |
inputFormat | string | Currently only "auto" and "ISO8601" actively change parsing behavior; both delegate to new Date(). Other values are accepted but ignored by the parser. | "auto" |
outputFormat | enum | One 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) |
customFormat | string | Required when outputFormat: "Custom". Supports tokens YYYY, MM, DD, HH, mm, ss. | (none) |
timezone | string | Reserved for future use; currently has no effect on output. Date components are taken from the JavaScript runtime’s local timezone. | (none) |
Examples
Section titled “Examples”Normalize US-style dates to ISO
Section titled “Normalize US-style dates to ISO”A signup_date column comes in as MM/DD/YYYY and you want YYYY-MM-DD for downstream consumers.
Before:
| customer | signup_date |
|---|---|
| Alice Anderson | 03/15/2024 |
| Bob Brown | 11/02/2024 |
| Carol Chen | 01/18/2025 |
Configuration: column: signup_date, inputFormat: auto, outputFormat: YYYY-MM-DD.
After:
| customer | signup_date |
|---|---|
| Alice Anderson | 2024-03-15 |
| Bob Brown | 2024-11-02 |
| Carol Chen | 2025-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_id | recorded_at |
|---|---|
| evt-1001 | 2025-04-10T08:30:00 |
| evt-1002 | 2025-04-10T14:05:42 |
| evt-1003 | 2025-04-11T22:15:00 |
Configuration: column: recorded_at, inputFormat: auto, outputFormat: YYYY-MM-DD HH:mm:ss.
After:
| event_id | recorded_at |
|---|---|
| evt-1001 | 2025-04-10 08:30:00 |
| evt-1002 | 2025-04-10 14:05:42 |
| evt-1003 | 2025-04-11 22:15:00 |
Unparseable and empty values pass through
Section titled “Unparseable and empty values pass through”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_id | due_date |
|---|---|
| t-1 | 2026-02-14T09:00:00 |
| t-2 | tbd |
| t-3 | |
| t-4 | 2026-03-01T17:30:00 |
Configuration: column: due_date, inputFormat: auto, outputFormat: YYYY-MM-DD.
After:
| task_id | due_date |
|---|---|
| t-1 | 2026-02-14 |
| t-2 | tbd |
| t-3 | |
| t-4 | 2026-03-01 |
Tips and Edge Cases
Section titled “Tips and Edge Cases”- 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 throughnew Date(). Region-ambiguous formats like15/03/2024(DD/MM/YYYY) parse asInvalid Datein V8 and are kept as-is. TheinputFormatfield is mostly informational today — onlyautoandISO8601change the parser path. Seeapps/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, thengetFullYear/Month/Datereads 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. Seeapps/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.
Related Transforms
Section titled “Related Transforms”- 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
tbdmarkers). - Filter Rows — drop rows whose date column is empty or unparseable rather than passing them through.