When someone in my application picks a date and time and I want to store that DateTime in UTC time, how do I transform the stored DateTime back to the user's local timezone?
const moment = require('moment-timezone')
const myTimeZone = 'Europe/Copenhagen'
const nowUTC = moment.utc().format('YYYY-MM-DD HH:mm')
const someDanishTime = '2019-04-19 17:00'
const someDanishTimeAsUTC = moment.tz(someDanishTime,myTimeZone)
.utc()
.format('YYYY-MM-DD HH:mm') // returns 2019-04-19 15:00
const utcTimeAsSomeDanishTime = moment.tz(someDanishTimeAsUTC, myTimeZone)
.format('YYYY-MM-DD HH:mm') // returns 2019-04-19 15:00
// I need a way to transform someDanishTimeAsUTC back to someDanishTime
You can use moment.utc
to parse your input as UTC
By default, moment parses and displays in local time.
If you want to parse or display a moment in UTC, you can use
moment.utc()
instead ofmoment()
.
then you can use tz()
function to convert it to given zone
The
moment#tz
mutator will change the time zone and update the offset.
Here a live sample:
const myTimeZone = 'Europe/Copenhagen'
const nowUTC = moment.utc().format('YYYY-MM-DD HH:mm')
const someDanishTime = '2019-04-19 17:00'
const someDanishTimeAsUTC = moment.tz(someDanishTime, myTimeZone)
.utc()
.format('YYYY-MM-DD HH:mm') // returns 2019-04-19 15:00
const utcTimeAsSomeDanishTime = moment.utc(someDanishTimeAsUTC).tz(myTimeZone)
.format('YYYY-MM-DD HH:mm') // returns 2019-04-19 17:00
console.log(someDanishTimeAsUTC);
console.log(utcTimeAsSomeDanishTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>