UTC to IST in JavaScript

Convert a UTC Date to India Standard Time using JavaScript's built-in Intl API — no library required, and correct on every date the year round.

UTC → TIME ZONE Live
RESULT — India Standard Time
22:25:41
Monday, September 21, 2026
UTC offset: UTC+5:30
Zone: IST

Use this live converter to check a value before wiring up the code below.

Quick answer

Pass the IANA zone name 'Asia/Kolkata' as the timeZone option — works identically in the browser and in Node.js, since both use the same Intl engine.

JavaScript — UTC to IST
const utcDate = new Date('2026-01-16T03:00:00Z'); const formatted = utcDate.toLocaleString('en-CA', { timeZone: 'Asia/Kolkata', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }); console.log(formatted); // 2026-01-16, 08:30:00

Reusable function

Wrap it once and reuse it for any UTC string and target zone:

JavaScript — reusable converter
function convertUtcToZone(utcIsoString, timeZone) { const d = new Date(utcIsoString); const parts = new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }).formatToParts(d); const get = (type) => parts.find(p => p.type === type).value; return `${get('year')}-${get('month')}-${get('day')} ${get('hour')}:${get('minute')}:${get('second')}`; } convertUtcToZone('2026-01-16T03:00:00Z', 'Asia/Kolkata'); // '2026-01-16 08:30:00'

Converting the current UTC time

JavaScript — current time
const nowInIst = new Date().toLocaleString('en-CA', { timeZone: 'Asia/Kolkata', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false });

Worked example

CellContains
UTC input2026-01-16T03:00:00Z
IST output2026-01-16, 08:30:00

Date rollover example

A conversion that crosses midnight shows the correct new calendar date automatically, since Date and Intl always operate on the full instant, not just a time-of-day.

JavaScript — date rollover
const utc = new Date('2026-09-17T23:00:00Z'); console.log( utc.toLocaleString('en-CA', { timeZone: 'Asia/Kolkata', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }) ); // 2026-09-18, 04:30 -- one calendar day ahead of the UTC date
CellContains
UTC input2026-09-17T23:00:00Z
IST output2026-09-18, 04:30

Time zone and daylight saving

India Standard Time does not observe daylight saving, so Asia/Kolkata always resolves to the same UTC+5:30 offset — there's no standard/daylight distinction to handle.

Common mistakes

  • Assuming the visitor's browser is already set to IST — new Date().toString() prints the browser's local time zone, which is only IST if the visitor happens to be in one.
  • Manually adding 5.5 hours to a UTC Date instead of using timeZone: 'Asia/Kolkata' — it produces the same result for IST specifically, but breaks silently the moment the same code is reused for a timezone that has daylight saving.
  • Parsing a timestamp string with no Z or offset suffix (e.g. '2026-01-16T03:00:00') and assuming it's UTC — JavaScript parses it as local time in whatever time zone the code is running in, which silently shifts the value.

Browser and Node.js

Every example above runs unchanged in a browser and in Node.js (v13 and later ship the full ICU/timezone database by default) — no moment-timezone, date-fns-tz, or other library is required. A library can still be worth adding in a larger app for convenience, but it's optional here, not a requirement for correct conversion.

Frequently asked questions

Use Intl.DateTimeFormat or Date.prototype.toLocaleString with timeZone: 'Asia/Kolkata' — no library needed.

Yes — the native Intl API (available in every modern browser and in Node.js) handles it directly via the 'Asia/Kolkata' IANA zone name.

No — India Standard Time has a fixed UTC+5:30 offset year-round, so the same code returns a consistent result on every date.