If You use liveview, You can set timezone, timezone_offset in the live socket, this way You can retrieve this information server side, and do the translation in the server.
let liveSocket = new LiveSocket("/live", Socket, {
hooks: Hooks,
params: {
_csrf_token: csrfToken,
locale: Intl.NumberFormat().resolvedOptions().locale,
// timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
// USE POLYFILL FOR IE11
timezone: moment.tz.guess(),
timezone_offset: -(new Date().getTimezoneOffset() / 60),
}
});
But as other have also mentionned, I prefer to do it client side