2

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

VincenzoC
  • 30,117
  • 12
  • 90
  • 112
user2386092
  • 186
  • 2
  • 9

1 Answers1

1

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 of moment().

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>
VincenzoC
  • 30,117
  • 12
  • 90
  • 112