I obtained data from open weather API
dt:1679888142
timezone:7200
I'm trying to change UNIX time into local time by applying Date
object in JavaScript followed by toUTCString()
to get the local time.
The goal is to change the obtained local time 'Mon, 27 Mar 2023 05:35:42 GMT'
into long formatted time eg 'Monday, March 27 at 4:35 AM'
. when i apply the following code, its not formatting also adding my timezone difference to it
this is the following code
let epochtime = weatherData.dt;
let timezone = weatherData.timezone;
const rfc2822Date = new Date((epochtime + timezone) * 1000).toUTCString();
const options = {
weekday: "long",
month: "long",
day: "numeric",
hour: "numeric",
minute: "numeric",
hour12: true
};
const longFormatDateTime = rfc2822Date.toLocaleString("en-us",options);
i tried to pass the date once again into date object which will result in gmt+timezone and format. formatting seems to work but local time is wrong
Because we're dealing with a fixed offset here, we can simply add the UTC offset in seconds to the epoch time when creating a Date object. We need to specify the 'UTC' timezone when formatting however, to avoid formatting in the client's timezone.
function formatUnixTime(epochTime, utcOffsetSeconds, options = {}) {
const date = new Date((epochTime + utcOffsetSeconds) * 1000);
return date.toLocaleTimeString([], { timeZone: 'UTC', ...options });
}
function getLongFormatUnixTime(epochTime, utcOffsetSeconds) {
const options = { weekday: 'long', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', hour12: true };
return formatUnixTime(epochTime, utcOffsetSeconds, options);
}
const weatherData = {
dt: 1679888142,
timezone: 7200
}
const epochTime = weatherData.dt;
const utcOffset = weatherData.timezone;
console.log('Unix time: ', epochTime);
console.log('UTC Offset (s):', utcOffset);
console.log('Time (UTC): ', getLongFormatUnixTime(epochTime, 0));
console.log('Time (in zone):', getLongFormatUnixTime(epochTime, utcOffset));