Как правильно настроить смещение часового пояса в 24-часовом формате - PullRequest
0 голосов
/ 04 марта 2019

У меня проблема с доступом к моему приложению из разных уголков мира.И у меня есть диаграмма для отображения пикового времени доступа.Если к нему обращаются из другой части мира (кроме источника), мне нужно, чтобы он отражал преобразованное время происхождения.Тем не менее, в соответствии с тем, как он настроен в настоящий момент, при расчете отображается fooPoint.hour со значением, например, 28 вместо 00:03 (am).Я могу точно указать, что это происходит в условном выражении else, например, если они получают доступ из Австралии с fooPoint.hour = 20 и this.state.timeZoneOffset = -8.20 - (-8) = 28 и я бы хотел, чтобы он отображался как 00:04.Я знаю, что мои вычисления неверны, поэтому кто-нибудь может помочь мне правильно отформатировать это?

Я не упомянул, что fooPoint.hour - это фактически точка данных, которую я получаю в объекте foo (который выбирается изAPI), так что представляет собой среднее значениеПиковое время определенного местоположения.При просмотре из другого места в другой части мира мне нужно учитывать разницу часовых поясов, чтобы отображать на графике пиковое время, но в их часовом поясе

Является ли библиотека решением с низким техническим долгом?

У меня есть такой массив объектов:

foo: {
  hour: 20
}

Я получаю смещение часового пояса следующим образом: let tzOffset = new Date().getTimezoneOffset() / 60; и сохраняю его в состоянии

Тогда у меня есть:

foo.forEach((fooPoint) => {
  fooPoint.hour = 
     fooPoint.hour - this.state.timeZoneOffset < 0
     ? fooPoint.hour - this.state.timeZoneOffset + 24
     : foorPoint.hour - this.state.timeZoneOffset;
});

1 Ответ

0 голосов
/ 04 марта 2019

Итак, у вас есть два возможных условия, которые вы хотите исправить:

  1. Смещение часового пояса занимает раннее утреннее время и приводит к отрицательному результату.Я верю, что ваш код справится с этим.
  2. Смещение часового пояса принимает результат позднего вечера и делает его больше 24. В вашем коде отсутствует эта настройка.

Попробуйте

foo.forEach((fooPoint) => {
  fooPoint.hour -= this.state.timeZoneOffset;
  fooPoint.hour = 
     fooPoint.hour < 0
     ? fooPoint.hour + 24
     : foorPoint.hour >= 24
       ? fooPoint.hour - 24
       : fooPoint.hour;
});

Перемещение вычитания происходит только потому, что я ленивый и не хочу повторять это пять раз.

Важнейшей частью здесь является проверка обеих возможностей.

Вы также можете найти его более читабельным как if операторы.

foo.forEach((fooPoint) => {
    fooPoint.hour -= this.state.timeZoneOffset;
    if (fooPoint.hour < 0) {
        fooPoint.hour += 24;
    } else if (fooPoint.hour >= 24) {
        fooPoint.hour -= 24;
    }
});

Эти два функционально одинаковы, но многим будет легче следовать.

...