zoukankan      html  css  js  c++  java
  • 计算加班类型以及小时数(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 + "(小时)";
    }

  • 相关阅读:
    WCF+EntityFramework+mysql总结
    实现Win7远程桌面关机和重启
    EF 4.1 一些操作
    Ado.net利用反射执行SQL得到实体
    .net IL 指令速查
    VS2010 /VC/bin/rcdll.dll 无法找到资源编译器
    Win7下 httpRequest带证书请求https网站
    VS2010 自动关闭的问题解决方法
    Android 之 悬浮窗口
    论 Java 中获取一组不重复的随机数之性能问题
  • 原文地址:https://www.cnblogs.com/yachao1120/p/8556629.html
Copyright © 2011-2022 走看看