I'm using the openweathermap API to get weather forecast data. I want to make sure that the forecast values are at minimum 2 hours in the future. The API is providing the forecast in 3 hour steps, so I need to make sure that the weather data are in the future.
Here is an example response provided by openweathermap API:
{"city":{"id":1851632,"name":"Shuzenji", "coord":{"lon":138.933334,"lat":34.966671}, "country":"JP", "cod":"200", "message":0.0045, "cnt":38, "list":[{ "dt":1406106000, "main":{ "temp":298.77, "temp_min":298.77, "temp_max":298.774, "pressure":1005.93, "sea_level":1018.18, "grnd_level":1005.93, "humidity":87 "temp_kf":0.26}, "weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}], "clouds":{"all":88}, "wind":{"speed":5.71,"deg":229.501}, "sys":{"pod":"d"}, "dt_txt":"2014-07-23 09:00:00"} ]}
I'm using JSON. The list
property has the value dt_txt
in this format: year-month-day 09:00:00
. Now I need to check if this DateTime is minimum 2 hours in the future and if not I simply take the item at index 1
of the list.
I wrote following code:
// look for next prediction
var weatherList = parsed.list;
// Check which time is relevant
// Get only time without description or/and date
// 2017-03-17 21:00:00
// ~~~~~~~~~~~~~^
var columnIndex = weatherList[0]["dt_txt"].indexOf(":") - 2;
// 2017-03-17 21:00:00
// ~~~~~~~~~~~^
var apiHoursString = weatherList[0]["dt_txt"].substring(columnIndex, columnIndex + 2);
// server time:
var hours = String((new Date()).getHours());
if(hours.length < 2){
hours = "0" + hours;
}
var apiHoursInt = parseInt(apiHoursString);
var hoursInt = parseInt(hours);
if((apiHoursInt - hoursInt) < 2){
indexToUse = 1
}
I know this code is bad - what is the proper way to do that on Node.js?