我有两组代码可以工作.需要帮助将它们合二为一.
这段代码让我了解两个日期之间的区别.完美的工作:
function test(){ var date1 = new Date(txtBox_1.value); var date2 = new Date(txtBox_2.value); var diff = (date2 - date1)/1000; var diff = Math.abs(Math.floor(diff)); var days = Math.floor(diff/(24*60*60)); var leftSec = diff - days * 24*60*60; var hrs = Math.floor(leftSec/(60*60)); var leftSec = leftSec - hrs * 60*60; var min = Math.floor(leftSec/(60)); var leftSec = leftSec - min * 60; txtBox_3.value = days + "." + hrs; }
@cyberfly下面的代码似乎有了排除sat和sun这个我需要的答案. source.但是,它在jquery和上面的代码是在JS中.因此,需要帮助结合,因为我缺乏知识:(
<script type="text/javascript"> $("#startdate,#enddate").change(function() { var d1 = $("#startdate").val(); var d2 = $("#enddate").val(); var minutes = 1000*60; var hours = minutes*60; var day = hours*24; var startdate1 = getDateFromFormat(d1,"d-m-y"); var enddate1 = getDateFromFormat(d2,"d-m-y"); var days = calcBusinessDays(new Date(startdate1),new Date(enddate1)); if(days>0) { $("#noofdays").val(days);} else { $("#noofdays").val(0);} }); </script>
function test(){ var date1 = new Date(startdate.value); var date2 = new Date(enddate.value); var diff = (date2 - date1)/1000; var diff = Math.abs(Math.floor(diff)); var days = Math.floor(diff/(24*60*60)); var leftSec = diff - days * 24*60*60; var hrs = Math.floor(leftSec/(60*60)); var leftSec = leftSec - hrs * 60*60; var min = Math.floor(leftSec/(60)); var leftSec = leftSec - min * 60; var startdate1 = getDateFromFormat(startdate,"dd/mm/yyyy hh:mm"); var enddate1 = getDateFromFormat(enddate,"dd/mm/yyyy hh:mm"); days = calcBusinessDays(new Date(startdate1),new Date(enddate1)); noofdays.value = days + "." + hrs; } start: <input type="text" id="startdate" name="startdate" value="02/03/2015 00:00"> end: <input type="text" id="enddate" name="enddate" value="02/03/2015 00:01"> <input type="text" id="noofdays" name="noofdays" value="">
解决方法
在确定两个日期之间的天数时,有很多关于什么是一天的决定.例如,2月1日至2月2日期间通常为一天,因此2月1日至2月1日为零天.
当增加仅计算工作日的复杂性时,事情变得更加艰难.例如. 2015年2月2日星期一至2月6日星期五是4天过去了(星期一到星期二是1,星期一到星期三是2等),但是“星期一到星期五”这个词通常被视为5个工作日,持续时间为2月2日星期一2月7日星期六也应该是4个工作日,但星期日到星期六应该是5个工作日.
所以这是我的算法:
>获取两个日期之间的总天数
>除以7得到整周的数量
>将周数乘以2得到周末天数
>从整体中减去周末天数以获得工作日
>如果总天数不是偶数周数,请将周数* 7添加到开始日期以获取临时日期
>虽然临时日期小于结束日期:
>如果临时日期不是星期六或星期日,请在工作日添加一个
>在临时日期添加一个
>就是这样.
最后的步进部分可能会被其他一些算法取代,但它永远不会循环超过6天,因此它是一个简单而合理有效的解决不平衡周数的问题.
以上的一些后果:
>周一至周五是4个工作日
>在同一天的同一天中的任何一天都是偶数周,因此甚至多达5周,例如2月2日星期一至2月9日星期一和2月1日星期日至2月8日星期日是5个工作日
> 2月6日星期五至2月7日星期日为零工作日
> 2月6日星期五至2月9日星期一是一个工作日
> 2月8日星期日至2月15日星期日,2月14日星期六和2月13日星期五均为5个工作日
这是代码:
// Expects start date to be before end date // start and end are Date objects function dateDifference(start,end) { // Copy date objects so don't modify originals var s = new Date(+start); var e = new Date(+end); // Set time to midday to avoid dalight saving and browser quirks s.setHours(12,0); e.setHours(12,0); // Get the difference in whole days var totalDays = Math.round((e - s) / 8.64e7); // Get the difference in whole weeks var wholeWeeks = totalDays / 7 | 0; // Estimate business days as number of whole weeks * 5 var days = wholeWeeks * 5; // If not even number of weeks,calc remaining weekend days if (totalDays % 7) { s.setDate(s.getDate() + wholeWeeks * 7); while (s < e) { s.setDate(s.getDate() + 1); // If day isn't a Sunday or Saturday,add to business days if (s.getDay() != 0 && s.getDay() != 6) { ++days; } } } return days; }
Dunno如何与jfriend00的答案或您引用的代码进行比较,如果您希望期间具有包容性,只需在开始日期或结束日期为工作日时添加一个.