javascript: Показать время AM / PM удаленного местоположения для данных о погоде удаленного местоположения

Как бы выглядела функция, которая возвращала бы местное время здесь, местное время там, восход солнца там, закат там, время прогноза погоды и время каждого из трехчасовых прогнозов?

Отвечая на свой вопрос в отдельном посте ниже.

Я использую 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 + ',&nbsp;' + padLeft(hour,2,'&nbsp;&nbsp;') + amPm;
  } else
  if (hhmmOpts == 1) { // Apr 18, 2018, 11:27a
    time += month + '-' + padLeft(day,2,'0') + '-' + year + ',&nbsp;' + hour + ":" + min + amPm;
  } else
  if (hhmmOpts == 2) { // 11p
    time += hour + ":" + min + amPm;
  }
  return time;
}

person Bobby    schedule 13.04.2018    source источник


Ответы (1)


Использование класса Placetime:

// Get the googleplaces api offset (snipet)
...
google.maps.event.addListener(autocomplete, 'place_changed', function () {
  var place = autocomplete.getPlace();
  // console.log(place);
  utcOffset = place.utc_offset;
  getWeather(utcOffset);
}
...

// Create a new placetime object
// To get device location local time use utcOffset==0.
plTimeObj = new placeTime(utcOffset);

// Get current time at present location
var plTime = timeConverter(plTimeObj.getCurrentTime(),1) ;

// Get sunrise at remote location 
// Comes from call to openweathermap (see response.sys.sunrise above )
sunriseTime = timeConverter( plTimeObj.getPlaceTime(resp.sys.sunrise) ,2) ;

// Get the time of the weather report (from openweathermap)
var rptTime = timeConverter( plTimeObj.getPlaceTime(resp.list[i].dt),2 ) ;

Следующий класс содержит всю информацию, необходимую для расчета местного времени в удаленном месте, и предоставляет методы для получения информации по мере необходимости.

class placeTime {
  constructor(utcOffset) {
    this.dateObj   = new Date();
    this.local2Utc = this.dateObj.getTimezoneOffset() * 60 ;
    this.utc2Place = (utcOffset==0 ? (0-this.local2Utc) : (utcOffset * 60) );
    this.currentTime = this.dateObj.getTime()/1000 + this.local2Utc + this.utc2Place ;
  }
  getPlaceTime(localTime) {
    var pTime = localTime + this.local2Utc + this.utc2Place ;
    return pTime;
  }
  getCurrentTime() {
    return this.currentTime ;
  }
}
person Bobby    schedule 13.04.2018