Изменение времени в соответствии с часовым поясом в React

#javascript #reactjs #redux

Вопрос:

У меня есть метод, который получает параметр в виде временной строки «15:35». Это время находится в часовом поясе UTC. Но я хочу преобразовать его в другой часовой пояс (например, Америка/Нью-Йорк или …).

В примерах говорится, что существует пакет под названием «момент», в котором есть метод «tz», но я проверил, и в этом пакете такого метода нет. Также я не должен обновлять пакет или устанавливать его. Как я мог преобразовать заданное время в соответствии с заданным часовым поясом без синтаксического анализа?

Пример : Дано «18:35» в UTC -> Ожидается 14:35 в Америке/New_York

Ответ №1:

Я предлагаю вам использовать moment, потому что он очень прост в использовании по сравнению с чистым javascript/машинописным текстом.

Для этого вы можете использовать приведенный ниже метод:

 moment.tz.setDefault(String)
 

В вашем случае вы можете установить часовой пояс на Америку/Нью-Йорк,:

 moment.tz.setDefault("America/New_York")
 

Вы можете узнать больше по адресу https://momentjs.com/timezone/docs/#/using-timezones/default-timezone/

Ответ №2:

Я действительно не понимаю, почему вы не можете установить пакет. Если вы в состоянии использовать moment.js (что я бы рекомендовал), и ваша строка не является строкой даты (например, «2021-09-22T15:35:00Z»), вы могли бы решить ее так:

 function changeDatetimeByTimezone(datetime, timezone) {
    const parsedDateAsUtc = moment.utc()
      .startOf('day') 
      .add(datetime.substring(0, 2), "hours")
      .add(datetime.substring(3, 5), "minutes");
    return parsedDateAsUtc.clone().tz(timezone).format("hh:mm");
}
 

а затем используйте его вот так:

 const dateTimeNY = changeDatetimeByTimezone("15:35", "America/New_York"); // 11:35
const dateTimeBE = changeDatetimeByTimezone("15:35", "Europe/Berlin"); // 17:35
 

Ответ №3:

Установите пакет «момент-часовой пояс». Это поможет преобразовать время. Обратитесь по ссылке ниже.

https://momentjs.com/timezone/

Как использовать:

1.Импортируйте оба указанных ниже пакета в верхнюю часть файла компонента.

 import moment from "moment";
import 'moment-timezone';
 

2.Преобразуйте время следующим образом.

 var localTime = moment.utc('18:35', "HH:mm").tz('America/New_York').format("HH:mm");
console.log(localTime);