Преобразование времени известного часового пояса в местный часовой пояс в момент js

Я пытаюсь преобразовать время (только время) из известного часового пояса в мой локальный часовой пояс с помощью Moment.js.

Я написал следующую функцию, и я получаю invalidDate в качестве вывода.

const convertToLocalTime = (time, tz) => {

  const t = moment.tz(time, tz)
  const localTime = t.local()
}
  • time это просто время; без даты, например: 10:06 am и,
  • tz — это строка часового пояса, например: Europe/Berlin

Что я делаю не так?


person Sooraj    schedule 03.03.2019    source источник
comment
Извините, если я просто неправильно прочитал это, но почему вы пропускаете два раза? Похоже, вы хотите передать одно время from и часовой пояс и вернуть новое время в локальной зоне. Для чего to?   -  person Mark    schedule 03.03.2019
comment
Да, я прохожу два раза. Это было намеренно. имена переменных могут вводить в заблуждение - у меня есть два раза, от (например, время начала) и до (например, время окончания) с известным tz, и я хочу преобразовать их оба в местное время.   -  person Sooraj    schedule 03.03.2019
comment
Я обновил вопрос, чтобы прояснить его.   -  person Sooraj    schedule 03.03.2019
comment
Я думаю, что общая проблема здесь в том, что момент работает с датами, а не со временем. Если вам удастся превратить время в дату и просто проигнорировать часть даты, это может быть потенциальным решением.   -  person rishat    schedule 03.03.2019


Ответы (1)


См. Анализ в Zone:

Конструктор moment.tz принимает все те же аргументы, что и конструктор момента, но использует последний аргумент как идентификатор часового пояса< /а>.

Поскольку ваш ввод (10:06 am) не соответствует формату, распознаваемому ISO 8601/RFC 2822 (см. moment(String) docs), вы должны передать параметр формата, как показано в moment(String, String) .

Вот живой образец:

const convertToLocalTime = (time, tz) => {
  const t = moment.tz(time, 'hh:mm a', tz)
  const localTime = t.local()
  return localTime;
}

const res = convertToLocalTime("10:06 am", 'Europe/Berlin');
console.log( res.format('hh:mm a') );
<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.14/moment-timezone-with-data-2012-2022.min.js"></script>

person VincenzoC    schedule 03.03.2019