Quiero cambiar mi distancia en Millas y duración en formato de horas. Ahora la distancia está en kilómetros y la duración en minutos, así que quiero cambiar el código para cambiar el formato, es decir, si la duración es más de 1 hora, será como 1 hora y 20 minutos y la distancia en millas, es decir, 10 millas, pero estoy atascado.
function onOpen() { var ui = SpreadsheetApp.getUi(); // Or DocumentApp or FormApp. ui.createMenu('Custom Menu') .addItem('Fetch Distance and Time', 'mainFun') .addToUi(); } function mainFun() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var data = sheet.getRange(2, 1, sheet.getLastRow()-1, 8).getValues(); Logger.log(data.length); for(var i=0; i<data.length;i++){ var startPoint = data[i][1]; var endPoint = data[i][7]; if(startPoint && endPoint){ var wayPoints = []; for(var j=2;j<=6;j++){ if(data[i][j]){ wayPoints.push(data[i][j]) } } var disMin = mapApiEndPoints(startPoint,endPoint,wayPoints) Logger.log(disMin) sheet.getRange(i+2, 9, 1, 2).setValues([disMin]) } } } function mapApiEndPoints(startPoint,endPoint,wayPoints){ var directions = Maps.newDirectionFinder().setOrigin(startPoint).setDestination(endPoint); for (var i=0; i<wayPoints.length; i++) { directions.addWaypoint(wayPoints[i]); } var res = directions.getDirections(); var time = 0; var distance = 0; for(var j=0; j<res.routes[0].legs.length; j++ ){ var route = res.routes[0].legs[j]; //Logger.log(route) time = time + route.duration.value; distance = distance + route.distance.value; } var distance = distance/1000 var timeMin = time/60 return [distance,timeMin]; }Una adivinanza. En lugar de esto:
var distance = distance/1000 var timeMin = time/60Prueba esto:
var distance = distance/1000 * .62; var timeMin = time/60/60; O (para obtener 1.23 en lugar de 1.23456789... ):
var distance = Math.round(distance/1000 * .62 * 100)/100; var timeMin = Math.round(time/60/60 * 100)/100;Para obtener la notación 'XX h YY m' a partir de segundos:
var s = 12345; // time in seconds var h = Math.floor(s/3600); var m = ('' + Math.round(s/60 % 60)).padStart(2, '0'); var time = (h > 0) ? h + ' h ' + m + ' min' : m + ' min'; console.log(time) // output: 3 h 26 min Otro enfoque con el objeto Date() :
var s = 12345; var date = new Date(s*1000); var timezone = date.getTimezoneOffset(); var h = date.getHours() + timezone/60; // exclude timezone offset var m = date.getMinutes(); var time = (h>0) ? h + ' h ' + m + ' min' : m + ' min' console.log(time); // output: 3 h 25 minDa resultados un poco diferentes porque no redondea los minutos correctamente: 350 segundos -> 5 minutos 50 segundos -> 5 minutos (no 6 minutos).
Las fechas y la hora son bestias engañosas. Ni siquiera estoy seguro de que mi último ejemplo sea 100% confiable para todas las zonas horarias.