做项目时,写到一个请假的模块,需要计算请假工时,去除周六周末,时间为一天8H,8:00-17:00,中午12:00-13:00 为午休时间

function getLeaveTime(startDate,endDate){var datetime1 = new Date(startDate), datetime2 = new Date(endDate);var date1 = datetime1.setHours(0,0,0);    //开始日期,毫秒表示
    var date2 = datetime2.setHours(0,0,0);    //结束日期,毫秒表示

    datetime1.setHours(startDate.substr(11,2),0,0);datetime2.setHours(endDate.substr(11,2),0,0);var travelHours = 0;    //保存请假小时数
    //开始结束时间均在一天
    if(date1 == date2){//1.开始时间8-12点
        if(datetime1.getHours()>=8 && datetime1.getHours()<=12){//1.1 结束时间在8-12点
            if(datetime2.getHours()>=8 && datetime2.getHours()<=12){travelHours += (datetime2.getHours()- datetime1.getHours() );}//1.2  结束时间在13-17点
            if(datetime2.getHours()>=13 && datetime2.getHours()<=17){travelHours += 12- datetime1.getHours()+datetime2.getHours()-13;}//1.3
            if(datetime2.getHours()>17){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}}//如果开始时间小于8点
        if(datetime1.getHours()<8){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}//如果开始时间大于17点,
        if(datetime1.getHours()>17){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}//2.开始时间在13-17点
        if(datetime1.getHours()>=13 && datetime1.getHours()<=17){//1.2  结束时间在13-17点
            if(datetime2.getHours()>=13 && datetime2.getHours()<=17){travelHours += datetime2.getHours()-datetime1.getHours();}//2.2 如果结束时间在17点之后,则工时累计到17点截止
            if(datetime2.getHours()>17){travelHours += 17-datetime1.getHours();}}}else{//如果开始时间小于8点,则计算工时的时候从8点开始计算
        if(datetime1.getHours()<8){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}//如果开始时间大于17点,
        if(datetime1.getHours()>17){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}if(datetime2.getHours()<8){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}//1.3
        if(datetime2.getHours()>17){toastr.error(SAFESOFT_LEAVE_I18N.msg_leave_time);return;}//计算开始时间当天工时
        if(datetime1.getHours()>=8 && datetime1.getHours()<=12){travelHours+=17-datetime1.getHours()-1;}if(datetime1.getHours()>=13 && datetime1.getHours()<=17){travelHours+=17-datetime1.getHours();}//计算结束时间当天工时
        if(datetime2.getHours()>=8 && datetime2.getHours()<=12){travelHours+=datetime2.getHours()-8;}if(datetime2.getHours()>=13 && datetime2.getHours()<=17){travelHours+=datetime2.getHours()-8-1;}//计算开始时间和结束时间相差天数  开始时间和结束时间不算进去,只计算相差的时间
        if((date2 - date1) / 1000 / 60 / 60 / 24-1>0){travelHours+=((date2 - date1) / 1000 / 60 / 60 / 24-1)*8;}//计算开始时间和结束时间之中有几个周六周末,然后去除这个时间
        if((weekendBetween(new Date(date1),new Date(date2)))>0){travelHours-=weekendBetween(new Date(date1),new Date(date2))*8;}}return travelHours;}

这个计算两个日期之间有几个周末,转载http://www.cnblogs.com/darkangle/archive/2008/02/14/1069182.html
//计算两个日期之间有几个周末
function weekendBetween(dtStart, dtEnd) {if (typeof dtEnd == 'string' )dtEnd = StringToDate(dtEnd);if (typeof dtStart == 'string' )dtStart = StringToDate(dtStart);var days =  parseInt((dtEnd - dtStart) / 86400000);var adds = 0;var m = (days+ dtStart.getDay() +1) % 7;if(m > 0)adds = m;if(m >2)adds = 2;var redu = 0
    if(dtStart.getDay() > 0)redu = 2;if(dtStart.getDay() ==1)redu =1;var subtotal = parseInt((days + dtStart.getDay() +1)/7)*2;return subtotal - redu + adds;}

计算请假工时,去除周六周末的时间相关推荐

  1. 自动计算请假工时 排除周六周日

    /*** 请假工时计算* starttime 开始时间 "2019-03-28 16:02", endtime 结束时间 "2019-03-29 16:02"* ...

  2. 去除法定节假日以及周末,计算请假时间

    业务需要,不废话,直接说核心. 直接上最佳解决方案,那就是动态的获取国家法定节假日(每年都会更新,可维护性更强).并去除周六周末. 当然,有一种比较low的解决方案就是把当年的法定节假日储存到表中或者 ...

  3. java后台 计算请假时间(判断了周六周末和法定节假日和国家调休)

    目录 1.假设上班时间如下: 2.请假时间计算方式: 3.请假可能存在的情况: 4.实现思路: 5.代码奉上,只需传入时间参数 1.假设上班时间如下: 上班时间为:08:30:00 中午休息时间为:1 ...

  4. Java计算请假时长(根据规则设置去除节假日、休息日、特殊日期)

    首先选择的日期要判断是不是节假日: 这里是写了工具类获取全年的日期信息. dateUtils工具类 某年第一天可以直接拼接 yyyy-01-01 获取节假日方法: public class DateU ...

  5. 数据库实现计算工作日时间差--去除节假日及周末

    由于统计需求,要求计算2个时间差,并且要求去除节假日和周末的时间. 说一下需求规则: 1.如果开始时间和结束时间在一个休假时间段内,时间差为0,比如10.2到10.4这种. 2.其他情况,只计算在休假 ...

  6. 【Java】判断是否是工作日、计算工期(去除周末)

    这里主要是通过java util包中的Calendar,来判断是否是工作日.计算工期(去除周末) /*** @ Author:yl1794* @ Date:2019/10/14 16:03* @ De ...

  7. java 计算请假天数,去掉节假日

    计算请假天数,去掉节假日的 前端 function countDays() {//外出开始日期var startDate = new Date(DSF.getElementValueByKey(&qu ...

  8. Javascript 计算请假天数

    计算请假天数,笼统来说就是计算两个日期的差值.对于JS来说,两个时间直接相减,得到的是这两个时间差的毫秒数. 先上代码后贴图. 1.测试数据 后文中用到的测试数据如下: var dateStart = ...

  9. 【泛微表单】请假流程中计算请假时长(非系统自带考勤类型)

    请假流程计算请假时长 按一天8小时计算,日期为浏览按钮日期字段,时间为单选下拉框: <script> var beginTimeId = {id: "field22286&quo ...

最新文章

  1. 【数据结构】堆,大根堆,小根堆,优先队列 详解
  2. python np.arange,np.linspace和np.logspace之间的区别
  3. windows 10 python哪个版本的好-windows支持哪个版本的python
  4. 一句命令删除docker所有镜像或容器
  5. Backbone.js入门学习资源
  6. gitlab ci 自动化部署_lt;为什么准备使用GitLab做CICD流水线?/gt;
  7. Python使用pandas合并多个Excel文件
  8. java web集成ldap_关于Java LDAP登录集成
  9. 海量数据搜索---搜索引擎
  10. 服务器是怎么工作的?(二)——arp工作原理详细解析
  11. 2006无法登录mysql_错误2006(HY000):MySQL服务器消失了
  12. 方差分析 Analysis of Variance ANOVA 变异数分析 F检验
  13. matlab波导色散,有效折射率法求矩形波导色散曲线(附Matlab程序)
  14. Houdini在UE4特效中的尝试分享
  15. Java实现简单计算器功能
  16. 甘超波:NLP理解层次
  17. wechat微信小程序 :对应的服务器证书无效
  18. xp系统显示无打印机服务器,XP共享打印机时提示“工作站服务没有启动”的原因和解决方案...
  19. 【uniapp】小程序云开发更新、删除云数据库数据
  20. #pragma clang diagnostic

热门文章

  1. 自动化设备贴合精度调试参考
  2. 智慧金融解决方案-最新全套合集
  3. markdown利器-小书匠
  4. python安装docx模块_python___docx模块
  5. JAVA工程师-蚂蚁金服电话面试
  6. javascript案例11——摇号、点名、随机点名
  7. Vue移动端页面下拉刷新
  8. uni-app 唤醒调用第三方app并传参(一 显示调用)
  9. 【pandas】空行相关操作及判断两列是否相同
  10. 吟游诗人AI作新诗 堪称现代莎士比亚十