如何用js计算工作日(去掉周六周日)

JavaScript011

如何用js计算工作日(去掉周六周日),第1张

近期做项目时 客户提出一个新需求,计划的工期要去掉双休日节假日,因为节假日的特殊性(由国家规定,非固定的不好计算,无法预测)不做考虑。 下面我们探讨下如何将两个时间段之间的周末去掉 首先一种比较笨的方法是 一天一天去判断是否是周六或周天,该方法简单粗暴 主要用 getDay() 去判断获得的星期数是否等于 0 或 6 是的话则在周末的天数累加 最后去开始与结束日期的差值 扣除 周末总和 就等于工作日啦(PS: 最后日期得加1),以下为实现的方法 以上的方法简单粗暴,但是有个大缺点就是 如果时间跨度比较大,这边计算的工作量就比较大了相差一年就得循环365次了。所以改进了下方法,我们都知道一周7天,其中两天为周末5天为工作日,那么 一个时间段就可以看成是0-6的循环即2017-08-01为周二 2017-08-12为周六那么就可以看成2、3、4、5、6、0、1、2、3、4、5、6这样就跟我们以前做数学题一个道理了先算出这个至少有几组完整的,然后在算剩下的有几天 实现如下: 以上就是如何计算工作日的两种方法。

//修正到星期六之后,再修正多出来的非假日

from.setDate(from.getDate()-(sDayofWeek%7))

workdays-=((sDayofWeek-2)>0)?sDayofWeek-2:0

应该改成

//修正到星期六之后,再修正多出来的非假日

if(sDayofWeek >1 &&sDayofWeek <7)

{

from.setDate(from.getDate()-(sDayofWeek%7))

workdays-=((sDayofWeek-2)>0)?sDayofWeek-2:0

}

/*************************************************************

*   判断某天是不是工作日

*   

*   @ date          {Date}             要判断的日期(0000-00-00)   

**************************************************************/

function isWorkday(date) {

    var date = !date ? new Date() : new Date(date)

    var getday = date.getDay()

    if (getday == 0 && getday == 6) {

        return '休息日'

    }

    else {

        return '工作日'

    }

}

// 调用

alert(isWorkday('2016-12-10'))

不传入日期表示判断今天。