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. sapui5 One or more constraints have not been satisfied.

    Getting error in creating a new project for UI5 One or more constraints have not been satisfied. slo ...

  2. OpenGL编程(一)渲染一个指定颜色的背景窗口

    上次已经搭好了OpenGL编程的环境.已经成功运行了第一个程序.可只是照搬书上的代码,并没弄懂其中的原理.这次通过一个小程序来解释使用GLUT库编写OpenGL程序的过程. 程序的入口 与其他程序一样 ...

  3. css常用的阴影

    一.box-shadow: 0 2px 15px 0 rgba(0,0,0,.15)!important 二. box-shadow: 0 2px 6px 0 rgba(0,0,0,.4); 三. . ...

  4. Highcharts 前端图表插件

    Highcharts 支持将图片下载成各种格式 Highcharts官网:https://www.hcharts.cn/download <div id="container" ...

  5. NodeJS学习笔记 (20)错误处理-error

    文章地址 https://github.com/chyingp/nodejs-learning-guide

  6. 洛谷1034 NOIP2002 矩形覆盖

    问题描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7). 这些点可以 ...

  7. bzoj 3408 热浪 最短路

    一道最短路的模板题,就当练习一下SPFA和dijkstra了 SPFA #include<bits/stdc++.h> using namespace std; struct edge{ ...

  8. sql查询 按照规定的顺序返回结果集。

    DECODE函数 oracle 独有,功能强大.相当于 if else if IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ..... ...

  9. GenIcam标准(五)

    2.8.10.Enumeration, EnumEntry Enumeration节点把一个名称(name)映射到一个索引值(index value),并实现Ienumeration接口.Enumer ...

  10. 题解 P2195 【HXY造公园】

    天哪这道题竟然只有一篇题解! emm,首先读题看完两个操作就已经有很明确的思路了,显然是并查集+树的直径 一波解决. 并查集不多说了,如果不了解的可以看这里. 树的直径的思路很朴实,就是两边DFS(B ...