Как получить смещение часового пояса для корректного отображения в формате 24h

#javascript #reactjs #frontend #momentjs

#javascript #reactjs #интерфейс #momentjs

Вопрос:

Я столкнулся с проблемой, из-за которой доступ к моему приложению осуществляется из разных частей мира. И у меня есть диаграмма для отображения пикового времени доступа. При доступе из другой части мира (отличной от источника) Мне нужно, чтобы оно отражало преобразованное исходное время. Однако в соответствии с текущими настройками вычисление выполняется, 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. Недостаточно ли локали даты?

2. @AlexisWilke спасибо за ваш ответ! Я не упомянул, что fooPoint.hour на самом деле это точка данных, которую я получаю в foo объекте, так что она представляет среднее значение. пиковое время определенного местоположения. При просмотре из другого места по всему миру мне нужно учитывать разницу в часовых поясах, чтобы отобразить на графике пиковое время, но в их часовом поясе.

3. Мне не ясно, почему 28 должно отображаться как 00: 03, а не 04:00. Я понимаю, что 28 или 28:00 неверно. Чего я не понимаю, так это почему 00: 03 является правильным.

4. Вы абсолютно правы, это должно быть 00:04 @mdfst13 ! Это был просчет с моей стороны

5. Вы все еще ошибаетесь… вы ставите 00:04 вместо 04:00

Ответ №1:

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

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

Функционально они одинаковы, но многим было бы проще следовать этому.