У меня отключена конвертация времени и как это исправить?

В настоящее время преобразование времени unix в удобочитаемое время из API. Я не уверен, имеет ли это значение, но время, предоставляемое API, — UTC. Текущий код, который тянет время, выглядит так:

let start = new Date(api.startUTC * 1000);
let end = new Date(api.endUTC * 1000);

Остальной код в основном форматирует время:

let TimeDate = {
                hours: function hours(i) {
                  return "0" + i.getHours();
                },
                minutes: function minutes(i) {
                  return "0" + i.getMinutes();
                },
                seconds: function seconds(i) {
                  return "0" + i.getSeconds();
                },
                date: function date(i) {
                  return "0" + i.getDate();
                },
                month: function month(i) {
                  return "0" + i.getMonth();
                },
                year: function year(i) {
                  return i.getFullYear();
                }
              };

              // TIME AND DATE FORMATS

              // Date of Pass
              let passDate = `${TimeDate.date(start).substr(
                -2
              )}/${TimeDate.month(start).substr(-2)}/${TimeDate.year(
                start
              )}`;
              // Time of start of Pass
              let startPass = `${TimeDate.hours(start).substr(
                -2
              )}:${TimeDate.minutes(start).substr(
                -2
              )}:${TimeDate.seconds(start).substr(-2)}`;
              // Time of End of Pass
              let endPass = `${TimeDate.hours(end).substr(
                -2
              )}:${TimeDate.minutes(end).substr(-2)}:${TimeDate.seconds(
                end
              ).substr(-2)}`;

Поэтому, если API возвращает 1561020080, преобразование из приведенного выше кода показывает, что это 10:41:20 20-го числа май 2019, что не имеет смысла, поскольку предполагается прогнозирование событий в будущем. Я поместил его на веб-сайт как этот, и возвращенное время было 08:41:20 UTC 20-го числа июнь 2019, что для целей того, что я делаю, имеет больше смысла.

Кажется, мои результаты отстают на месяц и опережают на 2 часа. Я понятия не имею, почему это происходит, и я не уверен, что что-то не так с кодом, который я предоставил выше, или мне следует добавить к результату еще несколько чисел, чтобы они соответствовали ответам, которые я получил с этого внешнего веб-сайта. На самом деле, я даже не уверен, что внешний веб-сайт правильный, но это имеет больше смысла, чем результаты, которые я получаю.

Я также знаю, что существуют такие вещи, как moment.js, но я просто учу себя, как все это работает, и я бы предпочел сделать это сам, чтобы узнать об этом немного больше.

Большое спасибо за помощь!

Редактировать: просто хотел добавить, что я думаю, что время может быть неправильным, потому что насколько я понимаю оно конвертируется в мое местное время из UTC. Я не могу объяснить, почему он показывает отставание на месяц. Дата/время моего компьютера точны.

Не уверен, почему дата отстает на месяц, но время конвертируется в местное время. Ваш текущий часовой пояс UTC+2.

phuzi 19.06.2019 10:24

По какой-то причине месяцы в объекте Date javascript отсчитываются от 0: 0 = январь, 1 = февраль и т. д. Посмотрите на них как на индексы в массиве Months, отсчитываемом от 0.

Peter B 19.06.2019 10:25

@PeterB - конечно! Это имеет смысл. Спасибо!

jimjamjosh 19.06.2019 10:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используемые вами геттеры основаны на часовом поясе, а браузер использует ваш текущий часовой пояс. Существуют независимые от часового пояса геттеры, такие как getUTCHours(). Это должно решить вашу проблему с часами.

Другая проблема заключается в том, что месяцы основаны на 0. Это означает, что январь равен 0, февраль равен 1, ... Итак, вам нужно добавить 1 к вашему месяцу, чтобы получить правильное числовое представление.

Тогда ваш код должен выглядеть так:

let start = new Date(api.startUTC * 1000);
let end = new Date(api.endUTC * 1000);

let TimeDate = {
    hours: function hours(i) {
      return "0" + i.getUTCHours();
    },
    minutes: function minutes(i) {
      return "0" + i.getUTCMinutes();
    },
    seconds: function seconds(i) {
      return "0" + i.getUTCSeconds();
    },
    date: function date(i) {
      return "0" + i.getUTCDate();
    },
    month: function month(i) {
      return "0" + (i.getUTCMonth() +1);
    },
    year: function year(i) {
      return i.getUTCFullYear();
    }
};

// TIME AND DATE FORMATS

// Date of Pass
let passDate = `${TimeDate.date(start).substr(
-2
)}/${TimeDate.month(start).substr(-2)}/${TimeDate.year(
start
)}`;
// Time of start of Pass
let startPass = `${TimeDate.hours(start).substr(
-2
)}:${TimeDate.minutes(start).substr(
-2
)}:${TimeDate.seconds(start).substr(-2)}`;
// Time of End of Pass
let endPass = `${TimeDate.hours(end).substr(
-2
)}:${TimeDate.minutes(end).substr(-2)}:${TimeDate.seconds(
end
).substr(-2)}`;

Другие вопросы по теме