我有以下适合我的需求:
function funLoad(str1,str3,str4) { var dym1 = str1.split("/"); var d=new Date(); var dym2 = d.getMonth() + 1 + "-" + d.getDate() + "-" + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes() + ":00"; //var dym2 = "6 10 2013 09:00:00"; var start = Date.parse(dym1[1] + "-" + dym1[0] + "-" + dym1[2] + " " + str3 + ":" + str4 + ":00"); var end = Date.parse(dym2); return (start-end) / (1000*60*60); } $("#btn1").click(function(event){ alert(funLoad($("#txt1").val(),$("#ddlHourTime").val(),$("#ddlMinuteTime").val())); });
这是一个jsfiddle:
http://jsfiddle.net/QTVWd/8/
我很欣赏这可能只适用于IE8,但我正在内部网环境中开发,每个人都只使用IE8,所以这不是问题.忽略这一点,此脚本只获取选定的日期和时间,将其与当前日期/时间进行比较,并返回小时数.到目前为止都很好.
问题在于它计算周末.如果开始和结束日期包括周末,我如何只计算工作日的小时数并排除周末?因此,例如,如果开始日期是星期五,结束日期是星期一,它应该只计算星期五和星期一的小时数,不包括周末的48小时.
解决方法
我在jsfiddle工作的这个功能应该做你想要的.你需要通过它的步伐来运行它,以确保它正确地计算一切.
function funLoad(str1,str4){
var dym1 = str1.split("/"); // get the given(start) epoch value (using midnight for time - will adjust for actual time further below) var start_date = new Date(dym1[2],(dym1[1]-1),dym1[0],0); var start_epoch = start_date.getTime(); // get todays(end) epoch value (using midnight for time - will adjust for actual time further below) var end_d = new Date(); var end_epoch = new Date(end_d.getFullYear(),end_d.getMonth(),end_d.getDate(),0).getTime(); var end_date_is_weekend = (end_d.getDay()==0 || end_d.getDay()==6)?1:0; // get value for 1 day in milliseconds var one_day = 1000*60*60*24; // how many days between given date and todays date var total_days = Math.ceil( (end_epoch - start_epoch ) / one_day)-1; // figure out how many of those total days are weekend days var date_to_check = start_epoch + one_day; var total_weekend_days = 0; var next_day_is_weekend = 0; for(var x=0; x<total_days; x++){ d=new Date(date_to_check); if(d.getDay()==0 || d.getDay()==6){ total_weekend_days++; if(x==0){next_day_is_weekend=1;} } date_to_check += one_day } // determine number of week days var total_week_days = total_days - total_weekend_days; // get the total hours from the total week days var total_hours = total_week_days*24; // still need to add the remaining hours from the given(start) date and the number of hours that have already past in the end(todays) date // add in the remaining hours left in the start date var hours_remaining_in_start_date = 0; // rounding up to next nearest start date hour if(str4 > 30){ if(str3 == 23 && next_day_is_weekend==0){ // rounding up puts the start date into the start of the next day so subtract // one day from the total,UNLESS the next day is a weekend. total_week_days -= 1; hours_remaining_in_start_date = -24; }else{ hours_remaining_in_start_date = 24 - (str3+1); } }else{ hours_remaining_in_start_date = 24 - str3; } total_hours += hours_remaining_in_start_date; // add in the hours from the end date (today date),UNLESS today is a weekend var hours_past_in_end_date = 0; var end_hour = end_d.getHours(); if(end_date_is_weekend==0){ // rounding up to next nearest end date hour if(end_d.getMinutes() > 30){ if(end_hour == 23){ // rounding up makes it a full day hours_past_in_end_date = 24; }else{ // rounding up just adds an hour hours_past_in_end_date = end_hour+1; } }else{ hours_past_in_end_date = end_hour; } } total_hours += hours_past_in_end_date; $('#result').html('start epoch:'+start_epoch+',end epoch:'+end_epoch+',total days'+total_days+',total weekends'+total_weekend_days+',total week days:'+total_week_days+',hours_remaining_in_start_date:'+hours_remaining_in_start_date+',hours_past_in_end_date:'+hours_past_in_end_date+',total hours:'+total_hours);
}