Как преобразовать localTimeString в utcTimeString и обратно в localTimeString, используя момент-часовой пояс - PullRequest
2 голосов
/ 19 апреля 2019

Когда кто-то в моем приложении выбирает дату и время, и я хочу сохранить этот DateTime в формате UTC, как мне преобразовать сохраненный DateTime обратно в местный часовой пояс пользователя?

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 Ответ

1 голос
/ 19 апреля 2019

Вы можете использовать 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>
...