给公司做了一套系统,涉及到请假单功能开发。在计算请假时长这块总结一下:按天计算的就不总结了比较简单,这里总结一下按小时数计算的 ,话不多说,直接上代码

// 获取两个日期相差的工作小时(不包括节假日)
function getHour(StartTime, EndTime) {StartTime = new Date(StartTime.replace(/-/g, '/'));EndTime = new Date(EndTime.replace(/-/g, '/'));var ms = Math.abs(EndTime.getTime() - StartTime.getTime());// 实际工时(天) = 起止日期差 - 周六日数目。if ((StartTime.getMonth() == EndTime.getMonth())&& (StartTime.getDate() == EndTime.getDate())) {// 若为同一日期var hour1 = (getDayHour(StartTime.getHours(), StartTime.getMinutes(),EndTime.getHours(), EndTime.getMinutes(), "1")).toFixed(1);$("#xxtj").val(hour1.substring(0,hour1.length-2));// 按天计算return hour1;} else {var sh=StartTime.getHours();var eh= EndTime.getHours();if (13 <= sh) {if (8 <= eh && eh <= 12) {var days = Math.ceil(ms / 1000 / 60 / 60 / 24) + 1;}else{var days = Math.floor(ms / 1000 / 60 / 60 / 24) + 1;}} else {var days = Math.floor(ms / 1000 / 60 / 60 / 24) + 1;}var workDayVal = 0;// 工时的余数var remainder = days % 7;// 工时向下取整的除数var divisor = Math.floor(days / 7);var weekendDay = 2 * divisor;// 起始日期的星期,星期取值有(1,2,3,4,5,6,0)var nextDay = StartTime.getDay();// 从起始日期的星期开始 遍历remainder天for (var tempDay = remainder; tempDay >= 1; tempDay--) {// 第一天不用加1if (tempDay == remainder) {nextDay = nextDay + 0;} else if (tempDay != remainder) {nextDay = nextDay + 1;}// 周日,变更为0if (nextDay == 7) {nextDay = 0;}// 周六日if (nextDay == 0 || nextDay == 6) {weekendDay = weekendDay + 1;}}workDayVal = days - weekendDay - 2;var hour0 = (workDayVal * 8 + getDayHour(StartTime.getHours(),StartTime.getMinutes(), EndTime.getHours(), EndTime.getMinutes(), "0")).toFixed(1);$("#xxtj").val(hour0.substring(0,hour0.length-2));// 按天计算return hour0;}
}
function getDayHour(sh, sm, eh, em, type) {sh = parseInt(sh);eh = parseInt(eh);if (type == "0") {// 计算非当天if (8 <= sh && sh <= 12) {sh = 12 - sh + 4;} else if (13 <= sh && sh <= 17) {sh = 17 - sh;}if (8 <= eh && eh <= 12) {eh = eh - 8;} else if (13 <= eh && eh <= 17) {eh = eh - 13 + 4;}return parseFloat(sh + eh);} else {// 计算当天if (sh == eh) {// 在同一小时if (sm == em) {return 0;} else {return Math.abs((sm - em) / 60);}} else {// 不在同一小时// 开始时间在上午时间段,并且结束时间在下午时间段if ((8 <= sh && sh <= 12) && (13 <= eh && eh <= 17)) {if (sm == 30) {return parseFloat(12 - sh + eh - 13);} else if (sm < 30) {return parseFloat(12 - sh + eh - 13);} else if (sm > 30 && sh != 12) {return parseFloat(12 - sh - 1 + eh - 13);}}// 开始时间与结束时间都在上午时间段if ((8 <= sh && sh <= 12) && (8 <= eh && eh <= 12)) {if (sm == em) {return parseFloat(Math.abs(eh - sh));} else {return parseFloat(Math.abs(eh - sh - 1) + (60 - sm) / 60+ em / 60);}} else if (13 <= sh && sh <= 17 && 13 <= eh && eh <= 17) {if (sm == em) {return parseFloat(Math.abs(eh - sh));} else {return parseFloat(Math.abs(eh - sh - 1) + (60 - sm) / 60+ em / 60);}}}}
}

因为都是整点的请,分钟数就不算了 。如有不对的地方,欢迎指教 !

JS实现请假时长计算(计算小时数差)相关推荐

  1. 请假时长计算和每月工作天数计算

    绪论 请假时长计算和每月工作天数计算其实六月份开发OA系统时就已经写出来了,只是一直没时间去整理,其实最近也很忙,毕竟年底要清一些开发任务.不过感觉自己今年博客写的太少了,所以这些日子基本每天都在加班 ...

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

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

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

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

  4. js将毫秒数转换为天数、小时数、分钟数和秒数的计算方法

    js将毫秒数转换为天数.小时数.分钟数和秒数的计算方法如下,参数为毫秒数: function formatDuring(millisecond) { var days = parseInt(milli ...

  5. android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...

    #微信小程序获取音频时长与实时获取播放进度 在小程序官方文档中 audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 ...

  6. js获取歌曲时长_竞价网站实时截流,网站手机号获取

    互联网时代发展迅速,互联网是推动21世纪世界经济快速发展的核心引擎.互联网经济是这个时代不可或缺的经济模式. 我们给网站做百度竞价的时候,会发现一些问题.就是我们在做竞价的时候,还是损失一部分客源,因 ...

  7. 学习使用js得到视频时长和播放时长

    <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8&q ...

  8. pythontime模块计算时长_用python的time模块查看你出生多长时间了

    time模块的应用查看出生了多长时间 查看银行卡解封时间 1.查看出生了多长时间 这里我们使用time模块计算我们出生了多长时间 import time # 导入时间模块 b = input('你的出 ...

  9. 卫星过顶计算matlab,一种圆轨道低轨卫星过顶剩余可见时长预测方法

    一种圆轨道低轨卫星过顶剩余可见时长预测方法 [技术领域] [0001] 本发明涉及卫星通信领域,特别是涉及一种圆轨道低轨卫星过顶剩余可见时长预 测方法. [背景技术] [0002] 圆轨道低轨卫星是指 ...

最新文章

  1. Java学习----到底调用哪一个方法(多态)
  2. 顺丰被删库?半个DBA的跑路经验总结
  3. 少儿编程python线上课程-少儿编程课堂|python – 用游戏学编程
  4. Python中面向对象的讲解(1)
  5. android微信小程序自动填表_微信小程序自动化,记录趟过的坑!
  6. sqlserver查找存储过程关键字方法之三
  7. Springmvc入门案例(1)
  8. Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
  9. python计时器单位,python(计时器)
  10. excel手机版_excel仓库管理手机版导出软件
  11. API的小结===一定要看
  12. 谷粒商城项目学-分布式基础
  13. 咸鱼Micropython— 标准库
  14. 计算机四级维修工查询,计算机安装调试维修员(四级)技能鉴定试题单总汇.doc
  15. python 字符串替换_Python中的字符串替换操作示例
  16. 怎样发量暴增_发量少怎么办如何增加发量?看完你就明白了
  17. 神经网络编程(python实现)
  18. ESP8266 RTOS SDK学习之 UDP
  19. 欧洲游记之——在丹麦上班的日子(一)
  20. Qt5 编译错误找不到头文件的解决方法

热门文章

  1. 软件智能:aaas系统AI众生的“世”和“界” 之18 从鲁棒性到DDD引擎
  2. 配置FTP站点操作步骤—图解
  3. 透明背景图片(PNG)制作
  4. AE-用particular制作金币掉落或者红包掉落或者樱花飘落的效果
  5. java反序列化漏洞修复方案,看完必懂
  6. Navigation Drawer Activity
  7. 长短时记忆神经网络python代码_人工智能之长短时记忆神经网络
  8. 【世界杯限定】致敬梅西,用Python刻画足球场上的战神
  9. 图像去雾学习(一):“暗通道”是什么
  10. python写动态壁纸_10分钟教你用python更换电脑壁纸