计算请假时间,只包含工作时间,不包含中午午休和非工作时间及星期六星期天,结束时间不能小于开始时间

1.计算相差小时,没有休息时间 

computed: {// 计算相差小时time() {let time = 0;if (this.ruleForm.date1 &&this.ruleForm.date2 &&this.ruleForm.date3 &&this.ruleForm.date4) {// 开始时间let date1 = this.ruleForm.date1;let y = date1.getFullYear();let m = date1.getMonth() + 1;m = m < 10 ? "0" + m : m;let d = date1.getDate();d = d < 10 ? "0" + d : d;let dateTime1 =y + "-" + m + "-" + d + " " + this.ruleForm.date2 + ":" + "00";// 结束时间let date3 = this.ruleForm.date3;let y2 = date3.getFullYear();let m2 = date3.getMonth() + 1;m2 = m2 < 10 ? "0" + m2 : m2;let d2 = date3.getDate();d2 = d2 < 10 ? "0" + d2 : d2;let dateTime2 =y2 + "-" + m2 + "-" + d2 + " " + this.ruleForm.date4 + ":" + "00";// 开始时间this.start = dateTime1;// 结束时间this.finish = dateTime2;var time1 = new Date(dateTime1);var time2 = new Date(dateTime2);let dateDiff = time2.getTime() - time1.getTime();// 计算出小时数let hours = dateDiff / (3600 * 1000);//time = hours.toFixed(1).replace(/\.0$/, "");if (time <= 0) {// "结束时间必须大于开始时间"this.tips = true;time = 0;} else {this.tips = false;}}return time + " 小时";},
}

2.计算工作时间,不含非工作时间及星期六星期天

   computed: {// 计算请假时间不包含中午12点到13点30的休息时间及9点到18点外的非工作时间time() {let time = 0;if (this.ruleForm.date1 &&this.ruleForm.date2 &&this.ruleForm.date3 &&this.ruleForm.date4) {// 开始时间let date1 = this.ruleForm.date1;let y = date1.getFullYear();let m = date1.getMonth() + 1;m = m < 10 ? "0" + m : m;let d = date1.getDate();d = d < 10 ? "0" + d : d;let dateTime1 =y + "-" + m + "-" + d + " " + this.ruleForm.date2 + ":" + "00";// 结束时间let date3 = this.ruleForm.date3;let y2 = date3.getFullYear();let m2 = date3.getMonth() + 1;m2 = m2 < 10 ? "0" + m2 : m2;let d2 = date3.getDate();d2 = d2 < 10 ? "0" + d2 : d2;let dateTime2 =y2 + "-" + m2 + "-" + d2 + " " + this.ruleForm.date4 + ":" + "00";// 开始时间this.start = dateTime1;// 结束时间this.finish = dateTime2;// 计算小时数time = this.calculateLeaveTime(dateTime1, dateTime2)}return time;},},

封装方法:传入 (年-月-日 时:分) 格式

 // 计算工作时间调休小时数calculateLeaveTime(startTime, endTime) {// console.log(startTime);// console.log(endTime);// 工作开始结束时间const workStart = 9;const workEnd = 18;// 休息开始结束时间const restStart = 12;const restEnd = 13;// 请假天数let day = 0;// 总计小时数let total_hour = 0;// 循环每天for (let date = new Date(startTime); date <= new Date(endTime); date.setDate(date.getDate() + 1)) {day++// 每天多少小时let dayLeaveTime = 0;// 获取今天是星期几let x = date.getDay();// 除开中午休息时间和星期六星期天if (![0, 6].includes(x)) {// 第一天要获取开始时间和结束时间if (day == 1) {// 小时let h = 0let h1 = startTime.split(" ")[1].split(":")[0] * 1let h2 = endTime.split(" ")[1].split(":")[0] * 1// 分let m1 = startTime.split(" ")[1].split(":")[1] * 1let m2 = endTime.split(" ")[1].split(":")[1] * 1// 判断结束时间是否大于开始时间if (h2 >= h1) {// 判断上午还是下午还是跨了中午if (h1 < restEnd && h2 >= restStart) {// 跨了中午 是否在休息时间内if (h1 >= restStart) {h1 = restStartm1 = 0}if (h2 < restEnd) {h2 = restEndm2 = 0}console.log("跨了中午", restStart - h1 + h2 - restEnd);h = restStart - h1 + h2 - restEnd} else if (h1 <= restStart && h2 <= restStart) {// 上午console.log("上午", h2 - h1);h = h2 - h1} else if (h1 >= restEnd && h2 >= restEnd) {// 下午console.log("下午", h2 - h1);h = h2 - h1}} else {// 判断上午还是下午还是跨了中午if (h1 >= restEnd && h2 < restEnd) {// 跨了中午if (h2 >= restStart) {h2 = restStartm2 = 0}console.log("跨了中午", workEnd - h1 + h2 - workStart);h = workEnd - h1 + h2 - workStart} else if (h1 <= restStart && h2 <= restStart) {// 上午console.log("上午", workEnd - h1 + h2 - workStart);h = workEnd - h1 + h2 - workStart - (restEnd - restStart)} else if (h1 >= restEnd && h2 >= restEnd) {// 下午console.log("下午", restStart - workStart + (workEnd - h1) + (h2 - restEnd));h = restStart - workStart + (workEnd - h1) + (h2 - restEnd)}}// 计算分钟console.log("第一天的小时", h);console.log("第一天的分钟", (m2 - m1) / 60);dayLeaveTime = h + ((m2 - m1) / 60)if (h < 0 || (h <= 0 && ((m2 - m1) / 60) <= 0)) {// "结束时间必须大于开始时间"this.tips = true;dayLeaveTime = 0;} else {this.tips = false;}} else {// 第二天开始 循环每天的工作时间范围的小时数for (let hour = workStart; hour < workEnd; hour++) {if (hour <= restStart || hour > restEnd) {dayLeaveTime += 1}}}}console.log(date.getDate() + "号的小时数", dayLeaveTime);total_hour += dayLeaveTime}if (day == 0) {// "结束时间必须大于开始时间"this.tips = true;} else {this.tips = false;}console.log(day + "天");console.log(total_hour + "小时");return total_hour + "小时";},

 

时间间隔30分钟 

3.设置结束时间不能小于开始时间

注意: :picker-options 属性失效,使用 :disabled-date 

<el-date-picker type="date" placeholder="结束日期" :disabled-date="disabledDate" v-model="ruleForm.date3" style="width: 100%"></el-date-picker>
    // 结束时间不能小于开始时间disabledDate(time){return time.getTime() < this.ruleForm.date1;},

 

 

有问题欢迎询问! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[笔试训练](二)

004 牛牛的快递_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 使用向上取整函数ceil()&#xff0c;&#xff08;记得添加头文件#include<cmath>&#xff09; #include <iostream> #include <cmath> using namespace std;int main(…

【深度学习实战(15)】使用训练好的语义分割模型进行推理测试

一、语义分割推理测试的一般流程 前处理 &#xff08;1&#xff09;get image &#xff08;2&#xff09;letter_box&#xff1a;o_h&#xff0c;o_w&#xff0c;i_h&#xff0c;i_w&#xff0c;n_h&#xff0c;n_w &#xff08;3&#xff09;1/250&#xff0c;CHW&#xff0c…

Java中ArrayList和顺序表

目录 1.线性表 2.顺序表 3 ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 1.线性表 线性表 &#xff08; linear list &#xff09; 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 …

Linux-延迟任务and定时任务

一.在系统中设定延迟任务要求如下 在系统中建立easylee用户&#xff0c;设定其密码为easylee 延迟任务由root用户建立 要求在5小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有root用户和easylee用户可以执行延迟任务的设定 二.在…

ArrayList与顺序表(1)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…

测试的分类(2)

目录 按照执行方式分类 静态测试 动态测试 按照测试方法 灰盒测试 按照测试阶段分类 单元测试 集成测试 系统测试 冒烟测试 回归测试 按照执行方式分类 静态测试 所谓静态测试就是不实际运行被测软件,只是静态地检查程序代码, 界面或文档中可能存在错误的过程. 不以…

ffmpeg安装使用(详细)

目录结构 前言ffmpeg下载ffmpeg环境变量配置ffmpeg环境变量配置验证ffmpeg使用举例说明.mp4 转 .wav.mp3 转 .wav.ogg 转 .wav 参考链接 前言 本文主要记录ffmpeg在Windows系统中的安装使用方法。 ffmpeg下载 FFmpeg官网下载 ffmpeg环境变量配置 解压后将“.\ffmpeg\bin”…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步&#xff1a; 1. 第一步就是修改cmakelist.txt&#xff0c;到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉&#xff0c;原来的一般都不是调试模式。加上下面一行代码&#xff0c;意思是设置调试模式。 # 断点调试 SET(CMAK…

Python 运行时的目录信息

摘要说明&#xff1a; 在 python 执行过程中&#xff0c;会涉及各种目录信息&#xff0c;了解各种目录的含义和获取方式&#xff0c;可以让我们更好地进行代码控制&#xff0c;并进行相应的处理。 一. 操作场景说明 1. 几个目录和文件 Windows的命令行窗口所在目录 &#xf…

【Linux】文件基本属性

Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 在 Linux 中我们可以使用 ll 或者 …

python 中pandas安装教程

1.打开cmd 输入代码 conda info --envs #查看环境 conda activate daiyi_Python #进入环境 conda list #查看环境 conda install pandas #下载pandas 输入y即可 conda uninstall pandas #删除pandas 输入y即可

《你想活出怎样的人生》上映,AOC带你打开宫崎骏的动画世界大门!

摘要&#xff1a;宫崎骏式美学&#xff0c;每一帧都是治愈&#xff01; 近日&#xff0c;宫崎骏新作《你想活出怎样的人生》正式公映。苍鹭与少年的冒险、奇幻瑰丽的场景、爱与成长的主题&#xff0c;让观众们收获到满满的爱与感动。宫崎骏总能以细腻的画面、温柔的音乐&#…

设计模式——模板方法

1)模板方法模式(Template Method Pattem)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2)简单说&#xff0c;模板方法模式 定义一个操作中…

ETLCloud中多并行分支运行的设计技巧

在大数据处理领域&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;流程是至关重要的一环&#xff0c;它涉及数据的提取、转换和加载&#xff0c;以确保数据的质量和可用性。而在ETL流程中&#xff0c;多并行分支的运行设计是一项关键技巧&#xff0c;可以有效…

华为ensp中MSTP多网段传输协议(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月22日15点29分 在华为ENSP中&#xff0c;MSTP&#xff08;多段传输协议&#xff09;是重要的生成树协议&#xff0c;它扩展了STP&#xff08;生成树协议&#xff09…

Java 判断当前时间是否在指定时间区间内

栗子&#xff1a;21:30:00 至 08:30:00 时间段内。 import java.time.Instant; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.util.Date;public class Demo {public static void main(String[] args) {// 创建一个Date…

猴子摘桃问题(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int sum 1;int i 0;//运算&#xff1b;for (i 1; i < 10; i){//运算&#xff1b;sum …

Docker 部署Java程序以及常用命令详解

文章目录 关于 docker 安装以及部署项目1. CentOS 中安装 Docker2. VMware中镜像拉取失败3. idea 远程连接Docker4. dockerfile 部署 springboot 项目5. 创建JDK运行环境配置6. docker 查询容器运行日志7. docker 容器将镜像中的文件拷贝到宿主机8. docker 部署mysql9. 容器中下…

typecho博客的相对地址实现

typecho其中的博客地址,必须写上绝对地址,否则在迁移网址的时候会出现问题,例如页面记载异常 修改其中的 typecho\var\Widget\Options\General.php 中的165行左右, /** 站点地址 */if (!defined(__TYPECHO_SITE_URL__)) {$siteUrl new Form\Element\Text(siteUrl,null,$this-…