#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:
Итак, у вас есть два возможных условия, которые вы хотите исправить:
- Смещение часового пояса происходит рано утром и приводит к отрицательному результату. Я верю, что ваш код справится с этим.
- Смещение часового пояса учитывает результат позднего вечера и делает его выше 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;
}
});
Функционально они одинаковы, но многим было бы проще следовать этому.