How to merge separate date and time columns into a datetime column
- Step 1Export the CSV with separate Date and Time columns — Download from your event system, booking platform, or log tool. Confirm the Date column is already in the order your destination wants (ISO needs
YYYY-MM-DD). - Step 2Drop the file onto the merger above — Headers become checkboxes; delimiter and encoding are auto-detected.
- Step 3Tick the Date column, then the Time column — Tick order is the join order. Tick Date first so the datetime reads date-then-time. Ticking Time first would produce
14:30:00T2025-01-15— invalid. - Step 4Set the separator — Type
Tfor ISO 8601 (2025-01-15T14:30:00) or a single space for SQL datetime (2025-01-15 14:30:00). The separator is inserted verbatim between the two values. - Step 5Name the column — Default is
merged; rename todatetime,timestamp, orcreated_atto match your table column. Cannot be blank. - Step 6Merge, then add a timezone suffix if your loader needs one — Click Merge columns; Date and Time vanish and the datetime column appears at the front. Download is suffixed
.merged-cols.csv. To add aZor+00:00offset, run CSV Find & Replace appending the suffix, since the merger won't add one.
Separator → datetime format
The output format is entirely determined by your separator and the format of the source parts. The tool adds nothing else.
| Separator | Output (with Date `2025-01-15`, Time `14:30:00`) | Use for |
|---|---|---|
T | 2025-01-15T14:30:00 | ISO 8601 — most APIs, JSON, JS Date.parse |
| space | 2025-01-15 14:30:00 | SQL timestamp / datetime loaders, BigQuery DATETIME |
T then Find & Replace add Z | 2025-01-15T14:30:00Z | ISO 8601 UTC (the merger can't add Z itself) |
space (Date in MM/DD/YYYY) | 01/15/2025 14:30:00 | Excel/locale formats — NOT ISO; reorder Date first if you need ISO |
What the merger does and does not do for dates
It concatenates strings. Anything requiring date semantics belongs in a different step.
| Need | Does the merger do it? | Where to handle it |
|---|---|---|
| Join Date + Time with a separator | Yes | — |
Reorder DD/MM/YYYY → YYYY-MM-DD | No — copies the string as-is | Reformat in the source export or a spreadsheet before merging |
Add a timezone offset (Z, +01:00) | No | CSV Find & Replace to append a suffix |
Add missing seconds (14:30 → 14:30:00) | No | Fix the source Time column, or Find & Replace |
| Validate the result is a real datetime | No | CSV Validator for type/format checks |
Cookbook
Before/after rows from event and log exports. The output is literal — these show exactly what the separator produces, including the invalid cases.
ISO 8601 datetime with the T separator
ExampleThe target case for APIs and JSON. Source parts already in ISO order, separator T.
Input: Date,Time,Event 2025-01-15,14:30:00,Login Tick: Date, Time Separator: "T" New name: timestamp Output (Date/Time removed, timestamp first): timestamp,Event 2025-01-15T14:30:00,Login
SQL datetime with a space separator
ExampleFor a Postgres/MySQL timestamp column, use a single space instead of T.
Input: Date,Time 2025-01-15,14:30:00 Tick: Date, Time Separator: " " Output: merged 2025-01-15 14:30:00
Non-ISO source date produces a non-ISO result
ExampleThe tool does not reorder date parts. A MM/DD/YYYY source date joined with T is NOT valid ISO 8601 — it just concatenates whatever's there.
Input: Date,Time 01/15/2025,14:30:00 Tick: Date, Time Separator: "T" Output (looks ISO-ish but is invalid ISO 8601): merged 01/15/2025T14:30:00 Fix: reformat Date to 2025-01-15 in the source BEFORE merging.
Adding a UTC Z marker as a second step
ExampleThe merger can't append a timezone. Build the ISO datetime first, then add Z with Find & Replace using an anchored pattern.
Merger output:
merged
2025-01-15T14:30:00
Then CSV Find & Replace (regex):
find: (\d{2}:\d{2}:\d{2})$
repl: $1Z
Final:
2025-01-15T14:30:00ZThree-part merge: Date, Time, and a Timezone column
ExampleIf your export already has a separate Timezone column, tick all three. Mind the separators — you may need a Find & Replace pass to remove the extra one before the offset.
Input:
Date,Time,TZ
2025-01-15,14:30:00,+01:00
Tick: Date, Time, TZ Separator: "T"
Output:
merged
2025-01-15T14:30:00T+01:00
^ extra T before the offset
Fix: Find & Replace "T+" -> "+" -> 2025-01-15T14:30:00+01:00Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Source date is `DD/MM/YYYY` or `MM/DD/YYYY`, ISO wanted
By designThe merger never reorders date parts — it concatenates the literal string. 15/01/2025 + T + 14:30:00 = 15/01/2025T14:30:00, which is not valid ISO 8601. Reformat the Date column to YYYY-MM-DD in the source export or a spreadsheet before merging.
Time column missing seconds
Preserved14:30 (no seconds) is copied as-is, producing 2025-01-15T14:30. Some strict ISO parsers want seconds. Fix the source Time format, or append :00 to two-part times with CSV Find & Replace.
No timezone offset added
By designThe tool appends nothing. If your loader requires a Z or +00:00 offset, build the datetime first and add the suffix with CSV Find & Replace (anchored regex on the end of the value). The merger has no timezone option.
Empty Time cell leaves a trailing separator
By designAn all-day event with no time produces 2025-01-15T (trailing T) because there's no skip-blank logic. Clean trailing separators with CSV Find & Replace, or split out the all-day rows first with CSV Column Filter.
Excel already mangled the date before export
PreservedIf Excel auto-converted a date to a serial number (45672) or reformatted it on open, that damaged value is what reaches the merger — it can't recover the original. Export the date column as text from the source system, or re-format in Excel as text, before merging.
Time ticked before Date
ExpectedThe join follows tick order, so ticking Time first yields 14:30:00T2025-01-15 — invalid. There's no drag-reorder; untick both and tick Date first, then Time.
Source Date and Time columns removed after merge
By designThe output keeps only the merged datetime column. If you still need the separate Date and Time (e.g. for date-only grouping in BI), duplicate those columns before merging — the tool can't keep originals.
Datetime column lands at the front
ExpectedThe browser tool inserts the merged column at position 0, so the file reads timestamp, Event, .... Reorder with CSV Column Reorder if your loader maps by position. The API accepts insertAt.
Frequently asked questions
What format should the Date column be in?
Already in the format your destination expects, because the merger concatenates raw values without reformatting. For ISO 8601 the Date must read YYYY-MM-DD before merging — the tool will not reorder DD/MM/YYYY for you. Reformat in the source export or a spreadsheet first.
Does this add a timezone offset?
No. The merge concatenates values as-is and appends nothing. To add a Z or +01:00 offset, build the datetime first, then append the suffix with CSV Find & Replace using an end-anchored pattern.
Can I merge three columns — Date, Time, and Timezone?
Yes — tick all three in order. Watch the separators: a T separator between Time and Timezone gives 14:30:00T+01:00, so you'll usually run CSV Find & Replace to turn T+ into + afterwards.
Should I use `T` or a space as the separator?
T for ISO 8601 (2025-01-15T14:30:00), which most APIs and JSON consumers expect. A single space for SQL timestamp/datetime loaders and BigQuery DATETIME. The separator is inserted verbatim, so type exactly what your target needs.
What happens to a row with a date but no time?
You get a trailing separator: 2025-01-15T (with T). There's no skip-blank option. Strip trailing separators with CSV Find & Replace, or filter the all-day rows out first with CSV Column Filter and handle them separately.
Will the tool validate that the result is a real datetime?
No — it does no date validation; it only joins strings. To check the merged column parses as a valid datetime and flag bad rows, run the output through CSV Validator, which infers column types and flags mixed/invalid values.
My Time column is `14:30` with no seconds — is that a problem?
Only if your loader needs seconds. The merger copies 14:30 verbatim, giving ...T14:30. Either fix the source Time format, or append :00 to two-part times with CSV Find & Replace before or after merging.
Are the Date and Time columns kept after merging?
No — they're removed and replaced by the single datetime column. If you also need date-only and time-only columns for BI grouping, duplicate them before merging; the tool offers no keep-originals toggle.
Where does the datetime column appear in the file?
At the front (position 0) in the browser tool, so the output is timestamp, Event, .... Reorder with CSV Column Reorder if your loader maps columns by position. The API exposes insertAt.
Is event/log data uploaded to a server?
No. Parsing and merging run in your browser via PapaParse. Timestamps, event names, and log payloads never leave the tab — only an anonymous usage counter is recorded if you're signed in.
How many rows can I process at once?
Free tier caps at 2 MB / 500 rows; this is a Pro tool with limits of 100 MB / 100,000 rows. For a large event log, split with CSV Row Splitter, merge each chunk, then recombine with CSV Merger.
Can I build datetime columns in an ETL pipeline?
Yes. GET /api/v1/tools/csv-column-merger returns the schema; pair the @jadapps/runner once and POST { columns: ["Date","Time"], separator: "T", newHeaderName: "timestamp", insertAt: 0 } with your CSV to 127.0.0.1:9789/v1/tools/csv-column-merger/run. Runs on-device. Pre-format the date and add timezone offsets as separate pipeline steps.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.