0

From api I get a timestamp returned like: 1643295022

How do I convert it to 2020-08-26T08:46:01+02:00 with Javascript?

export const generateDate = (time: number) => {
  return new Date(time * 1000);
};

The above returns Fri Jan 28 2022 12:57:00 GMT+0100 (Central European Standard Time). How do I convert it into something like 2022-01-27T14:50:22+02:00?

Also for another helper I am using already date-fns. Maybe I can use it in this case?

meez
  • 3,783
  • 5
  • 37
  • 91
  • 3
    `1643295022` looks like it might be too small. Maybe you need to convert it to miliseconds by multiplying by 1000? `new Date(1643295022000)` – evolutionxbox Feb 25 '22 at 09:51
  • @evolutionxbox sorry I was wrong. It's returning now `Fri Jan 28 2022 12:57:00 GMT+0100 (Central European Standard Time)`. I think I have to use `toISOString()` then it's converted to `2022-01-28T11:57:00.000Z` – meez Feb 25 '22 at 11:21
  • `new Date(1643295022 * 1e3).toISOString()` produces "2022-01-27T14:50:22.000Z". Also see [*How to convert zulu time to UTC +01:00 without moment*](https://stackoverflow.com/questions/70816328/how-to-convert-zulu-time-to-utc-0100-without-moment). – RobG Feb 25 '22 at 11:45

1 Answers1

0

I think what you are looking for is an ISO formatted Date but with the Time Zone Offset information.

You can obtain the time zone offset with the getTimezoneOffset() then append it to the end of the date format obtained from the toISOString() after removing the seconds string after the ..

Because the result of the getTimezoneOffset() is in minutes you need to convert it into HH:MM with the necessary + and - signs.

Hope the following is of help.

const isoWithTimeZone = d => {
let TZ=(d=new Date(d*1000)).getTimezoneOffset(), a=Math.abs(TZ);
return d.toISOString().split(".")[0]+(TZ<0?"+":"-")+("00"+~~(a/60)).slice(-2)+":"+("00"+a%60).slice(-2);
}

console.log(isoWithTimeZone(1643295022));
Mohsen Alyafei
  • 4,765
  • 3
  • 30
  • 42