What this Time Zone Converter does
Time Zone Converter takes a datetime-local wall clock (date plus hours and minutes; seconds are not read) and treats it as local time in a selected source IANA zone, then shows the same instant in a selected destination zone. Conversion is local: timeZoneConverterClient.js uses Intl.DateTimeFormat and Date. There is no file picker and no live time-server poll.
The in-page “26 cities” and “DST-aware” badges describe this curated list and the fact that Intl may apply daylight-saving rules for a zone. They are not a complete world database, legal time, or a DST-transition validator.
Available locations and time-zone identifiers
- List
- TIME_ZONES: 26 entries (UTC plus labeled cities). Selectors show label (IANA value).
- Regions
- REGION_ORDER / REGION_LABELS: Global, Americas, Europe, Africa, Asia, Pacific for Quick city picks.
- Presets
- ROUTE_PRESETS: NYC→London, LA→Tokyo, UTC→Addis, Berlin→NYC, Dubai→Sydney.
- Comparison set
- COMPARISON_ZONES: UTC, New York, London, Paris, Dubai, Tokyo, Sydney, plus From and To, de-duplicated.
getBrowserTimeZone reads Intl.DateTimeFormat().resolvedOptions().timeZone and uses it as From only if isKnownTimeZone is true; otherwise UTC. That identifier is not GPS geolocation. Arbitrary UTC+02:00 offsets are not selectable except as whatever the listed zones happen to be at the chosen instant.
How the tool interprets the source date and time
zonedDateTimeToUtc splits the datetime-local on T, maps year/month/day/hour/minute, builds utcGuess = Date.UTC(...) as if those numbers were UTC, then subtracts getTimeZoneOffsetMinutes(utcGuess, fromZone) * 60000. That offset is (Intl wall parts in the zone as Date.UTC − date.getTime()) / 60000. It is a one-pass correction, not Temporal.ZonedDateTime and not a two-iteration solver.
The default and Use current time values come from the device clock via getFullYear/getMonth/getDate/getHours/getMinutes—the host’s local civil time—not from the source zone’s clock.
Offsets, daylight saving time, and date changes in this implementation
getOffsetLabel prints UTC±HH:MM from that minute offset. formatOffsetDifference compares destination minus source offsets (“Same offset”, ±N hours, or ±Nh Mm). formatOutput uses en-US with hour12: true (weekday, month name, day, year, clock). formatShortOutput uses en-GB hourCycle h23. Abbreviations such as EST or CET are not shown.
Because Intl is asked for the selected Date in each IANA id, summer and winter dates can yield different offsets where the browser’s zone data has DST. Destination weekday/date can move to the previous or next calendar day. Always read the full converted date, not only the hour.
How to use the real controls
- Set Source date & time (datetime-local). There is no Convert button; useMemo calls analyzeTimeZoneConversion whenever sourceDateTime, fromZone, or toZone changes.
- Choose From and To. Both <select>s iterate TIME_ZONES only (26 options as “label (IANA)”). There is no search box and no free-text zone field. Mumbai is labeled Mumbai and stored as Asia/Kolkata.
- Click Swap time zones (aria-label). handleSwap exchanges fromZone and toZone only; the datetime-local numbers stay and are reinterpreted in the new From zone.
- Click Use current time to write getNowLocalDateTimeValue() (device local year-month-day and hour:minute) into the field. Those digits are then interpreted as wall time in From.
- Click a Popular routes pill: NYC → London, LA → Tokyo, UTC → Addis, Berlin → NYC, or Dubai → Sydney. That sets both zones and does not change the datetime.
- In Quick city picks, click the city name to set From or → to set To. Region headings are Global, Americas, Europe, Africa, Asia, and Pacific. The helper text is “City = from · → = to”.
- Tap a World comparison card (“Tap to set target”) to set To. Cards come from COMPARISON_ZONES plus From and To. Empty conversion shows “Choose a valid date, time, and time zones to see comparisons.”
- Click Copy converted time to copy formatShortOutput (en-GB 24-hour). The button reads Result copied for 1.5 seconds and stays disabled while toShort is empty. Click Copy full conversion line to copy formatConversionLine; it reads Line copied and stays disabled while toFormatted is empty. Clipboard failure is silent.
- Click Reset converter to restore now, From = getBrowserTimeZone() if listed else UTC, and To = Africa/Addis_Ababa. There is no download or calendar export.
Browser-local time versus a selected named time zone
Device-local wall time (datetime-local / Use current time) and the From IANA zone are independent. Matching them is your job. The live comparison cards format the computed utcDate in each listed zone; they are not separate ticking clocks.
Ambiguous local times and what this tool does not validate
Fall-back can make one local hour happen twice; spring-forward can skip an hour. This UI does not detect those cases, does not offer “earlier/later occurrence,” and does not show a dedicated invalid-time error. Browser Intl normalization may still produce a Date that looks valid. Historical and future results follow the ICU/IANA data in this browser, which can lag government rule changes.
Unsupported zones cannot be entered. Conversion failed. is the generic catch. Valid-looking output is not proof the wall time existed or that two browsers will agree.
Date conversion versus scheduling or calendar coordination
This page formats one instant across selected zones. It does not create calendar events, check attendee availability, know business hours, book a meeting, or send invites. The sidebar note to double-check critical meeting times is the right limit: a displayed conversion is not an appointment.
Privacy and browser-processing boundaries
Conversion does not POST the datetime to a time API. FileWorkflowShell privacy copy says calculations stay in the browser. trackToolEvent fires tool_started and (once) tool_success with tool, fromZone, and toZone—not the entered date or time. That is still first-party analytics metadata. The rest of the page can load site assets and advertising; clipboard, extensions, and shared devices remain outside this conversion path.
A short time-conversion checklist
- Confirm From is the zone the wall time was written in, not merely the browser default.
- If you used Use current time, remember those digits are device-local, then interpreted in From.
- After Swap, re-read the source interpretation; the instant may have changed.
- Read weekday and calendar date in the destination, not only the clock.
- Treat offsets as Intl-derived UTC±HH:MM for this Date, not as legal official time.
- Copy the short string or the full line; there is no .ics download.
When another DevToolKit tool is more appropriate
- Timestamp Converter — when you have a Unix seconds or milliseconds number, or need Date.toISOString() / toLocaleString() without picking an IANA city. This page does not show epoch integers.
- Age Calculator — when you need calendar age from a birth date, not a meeting conversion across zones.
- Unit Converter — when you need measurement units, not civil times.