#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);