javascript - elapsed minutes between two times

。_饼干妹妹 提交于 2019-12-23 03:39:19

问题


I have an application that requires the elapsed minutes between two times. Eg: 9:00 to 10:00 is sixty minutes. This is the solution that I worked out, but it seems excessively verbose. Can I do better?

EDIT: I receive strings in the format of YYYYMMDD and HHMM or HMM from a remote system.

// define a start time and end time as string
var start_time ="830";
var end_time ="1930";

// make sure we have complete 4 digit time
start_time   = ('0' + start_time).slice(-4);
end_time     = ('0' + end_time).slice(-4);

// extract start minutes and seconds
start_hour = start_time.substring(0,2); 
start_minute = start_time.substring(2,4); 

// extract end minutes and seconds
end_hour = end_time.substring(0,2); 
end_minute = end_time.substring(2,4); 

//get current date - it seems that we need a date a valid date to create a Date object
var now = new Date();
var year = now.getUTCFullYear();
var month = now.getUTCMonth();
var day = now.getDate();

// create Date object
var start_date_time_object = new Date(year,month,day,start_hour,start_minute);  
var end_date_time_object = new Date(year,month,day,end_hour,end_minute);    

// get number of minutes between start and end times
var start_minutes = (start_date_time_object.getHours() * 60) +  start_date_time_object.getMinutes();
var end_minutes = (end_date_time_object.getHours() * 60) +  end_date_time_object.getMinutes();

// calculate net time elapsed
var duration = end_minutes - start_minutes;

// display
console.log(start_minutes);
console.log(end_minutes);
console.log(duration);

回答1:


var start_time ="830";
var end_time ="1930";

var start_hour = start_time.slice(0, -2);
var start_minutes = start_time.slice(-2);

var end_hour = end_time.slice(0, -2);
var end_minutes = end_time.slice(-2);

var startDate = new Date(0,0,0,start_hour, start_minutes);
var endDate = new Date(0,0,0,end_hour, end_minutes);

var millis = endDate - startDate;
var minutes = millis/1000/60;
alert(minutes);

--output:--
660



回答2:


DEMO

Just remove what you don't want to see from the return. Now you can simply pass date objects in, you don't have to bother with conversions.

var cc = new Date("9/13/2012 12:00 AM");
var c = new Date();

function timeDifference(d, dd) {
    var minute = 60 * 1000,
        hour = minute * 60,
        day = hour * 24,
        month = day * 30,
        ms = Math.abs(d - dd);

    var months = parseInt(ms / month, 10);

        ms -= months * month;

    var days = parseInt(ms / day, 10);

        ms -= days * day;

    var hours = parseInt(ms / hour, 10);

        ms -= hours * hour;
    var minutes = parseInt(ms / minute, 10);

    return [
        months + " months",
        days + " days",
        hours + " hours",
        minutes + " minutes"
    ].join(", ");
};

document.body.innerHTML += timeDifference(cc, c) + "<br />";


来源:https://stackoverflow.com/questions/16650207/javascript-elapsed-minutes-between-two-times

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!