I have date time in this format 2023-06-23 23:00:00
need to convert it in this format Thu Jun 29 2023 22:58:50 GMT+0530 (India Standard Time)
i tried toString() it is not working.
I have date time in this format 2023-06-23 23:00:00
need to convert it in this format Thu Jun 29 2023 22:58:50 GMT+0530 (India Standard Time)
i tried toString() it is not working.
The following code:
This does not use any external libraries, just the Intl
library built into the browser.
const
shortTimeZoneFormat = (timeZone, locale = 'default') =>
new Intl.DateTimeFormat(locale, { timeZone, timeZoneName: 'short' }),
longTimeZoneFormat = (timeZone, locale = 'default') =>
new Intl.DateTimeFormat(locale, { timeZone, timeZoneName: 'long' });
const
preferredLocale = 'en-US',
preferredTimeZone = 'Asia/Kolkata',
shortTimeZoneFormatter = shortTimeZoneFormat(preferredTimeZone, preferredLocale),
longTimeZoneFormatter = longTimeZoneFormat(preferredTimeZone, preferredLocale);
const main = () => {
const
input = '2023-06-23 23:00:00', // India Standard Time (local)
formatted = formatDate(input, preferredTimeZone);
console.log(formatted); // Fri Jun 23 2023 23:00:00 GMT+0530 (India Standard Time)
};
const formatDate = (dateStr, timeZone) => {
const
asUtc = new Date(dateStr.replace(' ', 'T') + 'Z'), // Force UTC
asLocal = shiftDate(asUtc, timeZone), // Rollback to local timeZone
dateTime = asLocal.toLocaleString('en-US', { ...dateTimeOptions, timeZone })
.replace(/,/g, ''),
shortTimeZone = padOffset(stripDate(shortTimeZoneFormatter.format(asLocal))),
longTimeZone = stripDate(longTimeZoneFormatter.format(asLocal));
return `${dateTime} ${shortTimeZone} (${longTimeZone})`;
};
const shiftDate = (date, timeZone) =>
new Date(date.getTime() - (getOffset(timeZone, date) * 6e4));
// https://stackoverflow.com/a/68593283/1762224
const getOffset = (timeZone = 'UTC', date = new Date()) => {
const
utcDate = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' })),
tzDate = new Date(date.toLocaleString('en-US', { timeZone }));
return (tzDate.getTime() - utcDate.getTime()) / 6e4;
};
const stripDate = (timeZoneStr) => timeZoneStr.replace(/^\d+\/\d+\/\d+,\s*/, '');
const padOffset = (offset) => offset.replace(/(?<=[+=])(\d)(?=:)/, '0$1').replace(/:/, '');
const dateTimeOptions = {
weekday: 'short',
month: 'short',
day: 'numeric',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
};
main();