简体   繁体   中英

JavaScript calculate time and seconds

I was having some problem when trying to perform some calculation logic using JavaScript. Basically along a route there is 80 steps and it took around 9 minutes to finish up the entire route.

So I was trying to do an auto route which will tell you the minutes left to destination. My logic is as below:

9 * 60 / 80 = 6.75

So basically for each step is 6.75 seconds but I wanted to show a round number like 9 instead of 8.4 minutes. Here is the code:

getAllBusLoc(function(busList) {           
            var totalBusLoc = busList.length;
            var busLeftPct = Math.round(parseFloat(busList.length) * 40 / 100)

            document.getElementById("busStopLeft").innerHTML = totalBusLoc;
            pointArr.forEach(function(coord,index){
                setTimeout(function(){

                    var travelTime = document.getElementById(travelDistMin").value;               
   moveNext(coord.x, coord.y);

                }, 1000* index);
            });
        });

I got the travel time as variable travelTime which in this case is 9 minutes. For each point, I wanted to minus 6.75 seconds from the 9 minutes and display a round number instead of 8.2.

Any ideas?

Thanks in advance.

Use Math.round() for subtracting 6.75 from travelTime. This is will round to the nearest whole number.

An idea that I could suggest is to write a generic function that transforms a decimal time interval (for example, 8.25 minutes) into its equivalent 'mm:ss' value instead of rounding so that you display the precise time representation:

Number.prototype.toMMSS = function () { 
    d = this;
    var sign = d < 0 ? "-" : "";
    var min = Math.floor(Math.abs(d))
    var sec = Math.floor((Math.abs(d) * 60) % 60);
    return sign + (min < 10 ? "0" : "") + min + ":" + (sec < 10 ? "0" : "") + sec;
};

Example:

8.25.toMMSS()        // "08:15"

JSFiddle

Or, you could try the moment plugin duration function like:

moment.duration(8.25, 'minutes').minutes(); // 8

Or, the humanize method to round off:

console.log(moment.duration(8.51, "minutes").humanize()); // "9 minutes"
console.log(moment.duration(8.15, "minutes").humanize()); // "8 minutes"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM