如何使用moment-timezone

时间:2019-04-19 13:20:09

标签: momentjs moment-timezone

当我的应用程序中的某个人选择了日期和时间,并且我想将该日期时间存储为UTC时间时,如何将存储的日期时间转换回用户的本地时区?

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

1 个答案:

答案 0 :(得分:1)

您可以使用moment.utc将输入解析为UTC

  

默认情况下,时刻会解析并以当地时间显示。

     

如果要解析或显示UTC时间,可以使用moment.utc()代替moment()

然后您可以使用tz()函数将其转换为给定区域

  

moment#tz更改器将更改时区并更新偏移量。

这里有一个现场样本:

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>