计算加班类型以及小时数(js)
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)的更多相关文章
- Js计算时间差,天数,小时数,余数
var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); //begintime 为开始时间 v ...
- php计算两个时间相差的天数、小时数、分钟数、秒数
$startdate="2011-3-15 11:50:00";//开始时间 $enddate="2012-12-12 12:12:12";//结束时间 $da ...
- MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数
MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...
- JS 获取一段时间内的工作时长小时数
本来想是想找轮子的,但是并没有找到能用的,多数都是问题很大,所以就自己写了一个 需求说明 支持自选时间段,即开始时间与结束时间根据用户的上班及下班时间判定返回小时数 技术栈 moment.js 思考过 ...
- oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等
oracle如何计算两个日期的相差天数.月数.年数.小时数.分钟数.秒数 1.相差天数(两个日期相减) --Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('20 ...
- oracle 求两个时间点直接的分钟、小时数
select )) h, )) m, )) s from gat_data_record gdr where gdr.enddt between to_date('2011-1-1','yyyy-mm ...
- 小程序 js中获取时间new date()的用法(网络复制过来自用)
js中获取时间new date()的用法 获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获 ...
- 支付宝小程序室内地图导航开发-支付宝小程序JS加载esmap地图
如果是微信小程序开发,请参考微信小程序室内地图导航开发-微信小程序JS加载esmap地图文章 一.在支付宝小程序里显示室内三维地图 需要满足的两个条件 调用ESMap室内地图需要用到小程序web-vi ...
- SQL Server时间粒度系列----第6节基于当前日的小时数和分钟数与mysql unix_timestamp和from_unixtime的mssql实现
本文目录列表: 1.基于当前日的小时数和分钟数2.mysql unix_timestamp和from_unixtime的mssql实现 3.总结语 4.参考清单列表 基于当前日的小时数和分钟数 ...
随机推荐
- 前端图像 裁剪利器 JQuerJjcrop+裁剪图像保存教程
由于一个项目中需要用到用户头像上传裁剪组件,这两天便网上找了一些相关插件,主要由以下几种插件: 1.Image Cropper:http://elemefe.github.io/image-cropp ...
- 3、Go Exit
package main import ( "fmt" "os") func main() { //当使用`os.Exit`的时候defer操作不会被运行 所以 ...
- Navicat for Oracle
1.先解压Navicat for Oracle到任意目录 2.将instantclient-basic-nt-12.1.0.2.0解压到1中目录的instantclient_10_2文件夹下(推荐,可 ...
- XRDP与VNC的关系(转载)
XRDP与VNC的关系 如果仅仅安装XRDP协议.是不能在windows上使用远程桌面连接到Ubuntu. 还须要安装VNCServer才行. 所以,XRDP启动之后.系统会自己主动启动一个VNC会话 ...
- 部分vivo和oppo手机,使用上传图片功能,可能会出现退出webview的现象(回退到app的入口页面)
在公司的app里面嵌入了一个h5页面,h5页面有个使用图片上传功能,上传图片出现闪退的现象 问题描述:vivo手机,在app内的wap页面使用上传图片的功能,在选择好图片点击确认按钮后,出现退出整个w ...
- LinkedList源码学习
链表数据结构 当前节点会保存上一个.下一个节点. 参见 LinkedList的Node类 实现: 1. 内部链表的方式. 1.1 添加元素.追加的方式,创建一个新的节点[Node],用最后一个节点关联 ...
- 紫书 习题 10-10 UVa 1645(递推)
除了根节点以外,有n-1个节点,然后就看n-1的因数有那些,所有因数加起来(递推)就好了. #include<cstdio> #define REP(i, a, b) for(int i ...
- CSS浏览器兼容问题集(一)
CSS对浏览器的兼容性有时让人非常头疼,也许当你了解其中的技巧跟原理,就会认为也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml ...
- Qt中事件分发源码剖析
Qt中事件分发源码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,而且进行分发,这些都是在exec中进行的. 以下举例说明: 1)首先看看以下一段演示样例代码: ...
- url与图片
http://restapi.amap.com/v3/staticmap?location=116.481485,39.990464&zoom=10&size=750*300& ...