Как бы выглядела функция, которая возвращала бы местное время здесь, местное время там, восход солнца там, закат там, время прогноза погоды и время каждого из трехчасовых прогнозов?
Отвечая на свой вопрос в отдельном посте ниже.
Я использую API мест Google, чтобы получить широту, долготу и utc_offset удаленного местоположения.
Я использую openweathermap api для получения времени (в формате utc) текущего отчета о погоде в удаленном месте, восхода и заката, а также прогноза на 24 часа с шагом 3 часа.
Я создаю объект javascript date (), из которого я получаю utc_offset моего (не удаленного) местоположения с помощью функции getTimezoneOffset ().
Я использую функцию (показанную ниже), которая преобразует временную метку UNIX в часы и минуты (изменено для моего личного использования из этого сообщения в stackoverflow 5-21-2011 Преобразовать временную метку Unix во время в JavaScript.)
Что мне нужно сделать, так это:
- получить удаленное время UTC Unix для любой информации о погоде (текущая погода, восход, закат, несколько прогнозов на 3 часа)
- вычесть мое локальное смещение utc, чтобы получить скорректированное unix время для моего текущего времени в Гринвиче.
- добавить удаленное смещение utc, чтобы получить скорректированное время unix в удаленном месте
- передать настроенное время unix функции TimeConverter.
Используя эту информацию, я разместил функцию ниже, которая использует объект класса javascript для хранения и возврата всей необходимой информации.
Вот мои даты в формате utc. Временная метка от вызова геолокации на моем локальном устройстве.
timestamp: 1523646017649 (необходимо уменьшить на 1000, чтобы соответствовать скорректированным временным меткам из googleplaces и карты openweather)
Временная метка из вызова API погоды openweathermap для удаленной долготы и широты
dt: 1523644200 (response.dt)
восхода солнца: 1523595750 (response.sys.sunrise)
захода солнца: 1523644821 (response.sys.sunset)
прогноз на первые 3 часа: 1523653200 (response.sys.sunrise)
Мой utcoffset от dateObj = new date (); затем dateObj.getTimezoneOffset ()
мой utc_offset: 18000
Удаленный utc_offset из googleplacesapi
utc_offset: 7200
//To get current time where I am at, I can use this call and this function<br>
var myTime = timeConverter(Date.now()/1000,1);
// Return Result: Apr-13-2018, 2pm
function timeConverter(UNIX_timestamp,hhmmOpts){
// based on code written by @shomrat and edited by @Chin at
// https://stackoverflow.com/questions/847185/convert-a-unix-timestamp-to-time-in-javascript
var a = new Date((UNIX_timestamp) * 1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var day = a.getDate();
var hour = a.getHours();
var amPm = ( (hour < 12) ? "a" : "p" );
if ( hour == 0) {
hour = "12" ;
} else if ( hour > 12 ) {
hour = (hour - 12);
}
var min = a.getMinutes().toString().padStart(2,"0") ;
var time = "" ;
if (hhmmOpts == 0) { // Apr 18, 2018, 11a
time += month + '-' + padLeft(day,2,'0') + '-' + year + ', ' + padLeft(hour,2,' ') + amPm;
} else
if (hhmmOpts == 1) { // Apr 18, 2018, 11:27a
time += month + '-' + padLeft(day,2,'0') + '-' + year + ', ' + hour + ":" + min + amPm;
} else
if (hhmmOpts == 2) { // 11p
time += hour + ":" + min + amPm;
}
return time;
}