function GetDateDiff(startTime, endTime, diffType) {
//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
//将计算间隔类性字符转换为小写
diffType = diffType.toLowerCase();
var sTime = new Date(startTime); //开始时间
var eTime = new Date(endTime); //结束时间
//作为除数的数字
var timeType = 1;
switch (diffType) {
case "second":
timeType = 1000;
break;
case "minute":
timeType = 1000 * 60;
break;
case "hour":
timeType = 1000 * 3600;
break;
case "day":
timeType = 1000 * 3600 * 24;
break;
default:
break;
}
return parseFloat((eTime.getTime() - sTime.getTime()) / parseFloat(timeType));
}

function Fun_GetJiaBanTypeTatalHour(vstartdate, vstarthour, vstartmin, venddate, vendhour, vendmin) {

if (GetDateDiff(vstartdate, venddate, "day") > 1) {
alert("填写的加班时间已大于24小时,请检查后重新输入!!!");
return;
}
if (GetDateDiff(vstartdate, venddate, "second") < 0) {
alert("加班开始时间大于加班结束时间,请检查后重新输入!!!");
return;
}

//判断开始日期的日期类型
var CountryHoliday = "2018-01-01, 2018-02-16, 2018-02-17, 2018-02-18, 2018-04-05, 2018-05-01, 2018-06-18, 2018-09-24, 2018-10-01, 2018-10-02, 2018-10-03";
var isCountryHoliday;

var startdate_comebine = vstartdate + " " + vstarthour + ":" + vstartmin;
var venddate_zero = venddate + ' ' + '00:00:00';
var enddate_comebine = venddate + ' ' + vendhour + ':' + vendmin;

var start_end_Hour = GetDateDiff(startdate_comebine, enddate_comebine, "hour");
var start_zero_Hour = GetDateDiff(startdate_comebine, venddate_zero, "hour");
var zero_end_Hour = GetDateDiff(venddate_zero, enddate_comebine, "hour");

var totalhour_holiday; var totalhour_week; var totalhour_day; var start_zero_Hour; var zero_end_Hour; var start_end_Hour;

var isCountryHoliday_startDate;
var isCountryHoliday_endDate;

var isWeek_vstartdate;
var isWeek_venddate;

var CH = CountryHoliday.split(",");

//开始日期是否是法定假日
for (g = 0; g < CH.length; g++) {

if (vstartdate == CH[g]) {
isCountryHoliday_startDate = true;
break;
} else {
isCountryHoliday_startDate = false;
}
}
//结束日期是否是法定假日
for (g = 0; g < CH.length; g++) {

if (venddate == CH[g]) {
isCountryHoliday_endDate = true;
break;
} else {
isCountryHoliday_endDate = false;
}
}

//开始日期是否是周末
var startdate_replace = vstartdate.replace(/-/g, '/');
var startdate_result = new Date("" + startdate_replace + "");

if (startdate_result.getDay() == "0" || startdate_result.getDay() == "6") {
isWeek_vstartdate = true;
} else {
isWeek_vstartdate = false;
}

//结束日期是否是周末
var venddate_replace = venddate.replace(/-/g, '/');
var venddate_result = new Date("" + venddate_replace + "");

if (venddate_result.getDay() == "0" || venddate_result.getDay() == "6") {
isWeek_venddate = true;
} else {
isWeek_venddate = false;
}

//开始日期和结束日期不相同的情况
if (vstartdate != venddate) {
//首先判断开始日期是否是法定假日
if (isCountryHoliday_startDate) {
//开始日期是法定假日 然后判断结束日期是否是法定假日
if (!isCountryHoliday_endDate) {
if (isWeek_venddate) {
alert("结束日期是双休日");
totalhour_week = zero_end_Hour;
totalhour_day = 0; totalhour_holiday = start_zero_Hour;
} else {
//只是工作日
alert("结束日期是工作日");
totalhour_day = zero_end_Hour; totalhour_week = 0; totalhour_holiday = start_zero_Hour;
}
} else {
totalhour_day = 0; totalhour_week = 0; totalhour_holiday = start_end_Hour;
}
} else {
//开始日期不是法定假日 那么开始日期只有两种情况 双休日或者工作日
//--如果开始日期不是法定假日 则判断是否是双休日
if (isWeek_vstartdate) {
//开始日期是双休日
//--继续判断结束日期是否是双休日
if (!isWeek_venddate) {
//结束日期不是双休日
if (isCountryHoliday_endDate) {
// 先判断结束日期是否是法定假日
totalhour_day = 0;
totalhour_week = start_zero_Hour;
totalhour_holiday = zero_end_Hour;
} else {
//结束日期不是法定假日 则结束日期是工作日
totalhour_holiday = 0;
totalhour_week = start_zero_Hour;
totalhour_day = zero_end_Hour;
}
} else {
//结束日期和开始日期类型相同都是双休日
totalhour_day = 0;
totalhour_holiday = 0;
totalhour_week = start_end_Hour;
}
} else {//开始日期是工作日
//如果开始日期不是法定假日 不是双休日,那么开始日期为工作日
//继续判断结束日期 是否为法定假日
if (isCountryHoliday_endDate) {
//结束日期是法定假日
totalhour_week = 0;
totalhour_day = start_zero_Hour;
jiabantype_holiday = zero_end_Hour;
} else {
//结束日期为双休日或者工作日
if (isWeek_venddate) {
//结束日期是双休日
totalhour_day = start_zero_Hour;
totalhour_week = zero_end_Hour;
totalhour_holiday = 0;
} else {
//结束日期是工作日
totalhour_day = start_end_Hour;
totalhour_holiday = 0;
totalhour_week = 0;
}
}
}
}
}
//开始日期和结束日期相同的情况
else {

//是法定假日
if (isCountryHoliday) {
//。。。。。
totalhour_holiday = start_end_Hour; totalhour_day = 0; totalhour_week = 0;
} else {
//判断是否是周末
var sdate_replace = vstartdate.replace(/-/g, '/');
var sdate = new Date("" + sdate_replace + "");

if (sdate.getDay() == "0" || sdate.getDay() == "6") {
//是周末
//计算小时 时差
totalhour_week = start_end_Hour;
totalhour_day = 0; totalhour_holiday = 0;
} else {
//只是工作日
totalhour_day = start_end_Hour; totalhour_week = 0; totalhour_holiday = 0;
}
}
}
//alert("工作日 " + totalhour_day + " 双休日 " + totalhour_week + " 法定假日 " + totalhour_holiday);
document.getElementById('sResult').value= "工作日 " + totalhour_day + "(小时) 双休日 " + totalhour_week + "(小时) 法定假日 " + totalhour_holiday + "(小时)";
}

计算加班类型以及小时数(js)的更多相关文章

  1. Js计算时间差,天数,小时数,余数

    var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); //begintime 为开始时间 v ...

  2. php计算两个时间相差的天数、小时数、分钟数、秒数

    $startdate="2011-3-15 11:50:00";//开始时间 $enddate="2012-12-12 12:12:12";//结束时间 $da ...

  3. MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

    MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...

  4. JS 获取一段时间内的工作时长小时数

    本来想是想找轮子的,但是并没有找到能用的,多数都是问题很大,所以就自己写了一个 需求说明 支持自选时间段,即开始时间与结束时间根据用户的上班及下班时间判定返回小时数 技术栈 moment.js 思考过 ...

  5. oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等

    oracle如何计算两个日期的相差天数.月数.年数.小时数.分钟数.秒数 1.相差天数(两个日期相减) --Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('20 ...

  6. oracle 求两个时间点直接的分钟、小时数

    select )) h, )) m, )) s from gat_data_record gdr where gdr.enddt between to_date('2011-1-1','yyyy-mm ...

  7. 小程序 js中获取时间new date()的用法(网络复制过来自用)

    js中获取时间new date()的用法   获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获 ...

  8. 支付宝小程序室内地图导航开发-支付宝小程序JS加载esmap地图

    如果是微信小程序开发,请参考微信小程序室内地图导航开发-微信小程序JS加载esmap地图文章 一.在支付宝小程序里显示室内三维地图 需要满足的两个条件 调用ESMap室内地图需要用到小程序web-vi ...

  9. SQL Server时间粒度系列----第6节基于当前日的小时数和分钟数与mysql unix_timestamp和from_unixtime的mssql实现

    本文目录列表: 1.基于当前日的小时数和分钟数2.mysql unix_timestamp和from_unixtime的mssql实现 3.总结语 4.参考清单列表   基于当前日的小时数和分钟数   ...

随机推荐

  1. JavaScript总结(4)

    如何绑定事件 程序员可以编写代码,要求页面在发生了某些事件时调用相应的JavaScript语句或函数,这被称为事件的绑定.事件的绑定有3种方式.1)在HTML标记中直接声明,这是最常见的一种做法.语法 ...

  2. Unified BeginFrame scheduling for Chrome

    Unified BeginFrame scheduling for Chrome http://goo.gl/D1Qxrr Status: http://crbug.com/401331 and ht ...

  3. 在 Ubuntu 18.04 LTS 无头服务器上安装 Oracle VirtualBox

    作者: Sk 译者: LCTT qhwdw | 2018-10-12 01:59 本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox. ...

  4. SPOJ 7258 SUBLEX 后缀数组 + 二分答案 + 前缀和

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  5. 关于element-ui框架里面table组件的使用

    1.表格的数据放哪里:后台返回的列表数据放到:data后面. 2.每一个列怎么显示数据:返回的列表里面的属性想要在列显示出来,将对应的字段名写到prop后面就行. 3.列表上面想显示序号:{{scop ...

  6. python 代码编写规范

    一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车.3 类 ...

  7. Laravel修炼:服务提供者

    前言   上一篇博客文章收集了关于Laravel服务容器的相关知识(传送门),我们知道了服务容器主要有绑定和解析两个重要功能,那么Laravel这个框架集齐了如此多功能,我们项目可能还需要另外引入一些 ...

  8. Win10 + YOLOv3训练VOC数据集-----How to train Pascal VOC Data

    How to train (Pascal VOC Data): Download pre-trained weights for the convolutional layers (154 MB):  ...

  9. 今日SGU 5.28

    SGU 121 题意:给你一张图,问你每个顶点必须有黑白两条边(如果它的边数>=2),问你怎么染色,不行就输出no 收获:你会发现不行的情况只有一个单纯的奇数环的时候,反之我们交替染色即可 #i ...

  10. [NOI2003]逃学的小孩(树的直径)

    [NOI2003]逃学的小孩 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听 ...