В настоящее время преобразование времени 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. Я не могу объяснить, почему он показывает отставание на месяц. Дата/время моего компьютера точны.
По какой-то причине месяцы в объекте Date javascript отсчитываются от 0: 0 = январь, 1 = февраль и т. д. Посмотрите на них как на индексы в массиве Months, отсчитываемом от 0.
@PeterB - конечно! Это имеет смысл. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используемые вами геттеры основаны на часовом поясе, а браузер использует ваш текущий часовой пояс. Существуют независимые от часового пояса геттеры, такие как 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)}`;
Не уверен, почему дата отстает на месяц, но время конвертируется в местное время. Ваш текущий часовой пояс UTC+2.