欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

javascript - 关于请假时间计算问题

程序员文章站 2024-04-05 17:56:48
...
首先说一下请假规则吧:
1、上午请假的,时长不得小于3小时
2、下午请假的,时长不得小于5小时
3、工作时间:9:00~18:00
4、中午有一小时非工作时间
因为公司的制度,加班没有加班费但是可以调休,所以时间必须精确到小时。那么问题来了:
1、如果我请假的时间跨度是上午到下午满足规则,但是系统计算时间会多一小时:
  • 我的解决方法是:首先判断开始和节时间是否为同一天,再判断开始时间是否为上午,结束时间是否为下午,如果都满足,那么系统计算的时间再减去一小时

2、如果有些人傻,选择开始和结束时间的时候超出了工作时间,比如结束时间是18:00以后,那么又要判断是否要扣除18:00以后的时间

3、最麻烦的就是跨天,如果假期中包含法定假日、双休等特殊情况。还有非整数跨天,比如只请到三天后的上午11点,那么三天后的0:00~9:00这段时间怎么去掉

思绪有些混乱,还请有经验的前辈给分享一下经验,谢谢!!

回复内容:

首先说一下请假规则吧:
1、上午请假的,时长不得小于3小时
2、下午请假的,时长不得小于5小时
3、工作时间:9:00~18:00
4、中午有一小时非工作时间
因为公司的制度,加班没有加班费但是可以调休,所以时间必须精确到小时。那么问题来了:
1、如果我请假的时间跨度是上午到下午满足规则,但是系统计算时间会多一小时:

  • 我的解决方法是:首先判断开始和节时间是否为同一天,再判断开始时间是否为上午,结束时间是否为下午,如果都满足,那么系统计算的时间再减去一小时

2、如果有些人傻,选择开始和结束时间的时候超出了工作时间,比如结束时间是18:00以后,那么又要判断是否要扣除18:00以后的时间

3、最麻烦的就是跨天,如果假期中包含法定假日、双休等特殊情况。还有非整数跨天,比如只请到三天后的上午11点,那么三天后的0:00~9:00这段时间怎么去掉

思绪有些混乱,还请有经验的前辈给分享一下经验,谢谢!!

跨天,其实和当天,没区别,反正每天请假的时间都是9点到18点
先判断
(开始-结束)/(24X3600)=天数,如果大于1,就说明是跨天的如:2016-08-30 10:30-2016-09-04 12:00,其实只要计算08-30和09-04这两天的情况就好了,中间那几天7*3=21小时

某天(上班+请假)
无非几种情况,早上请假,下午请假,早上跨到下午
那if条件就麻烦了点

结束时间 开始时间 >= 13点 && 结束时间

剩下的基本就是跨段的,跨段分上午和下午来计算就好了。

0-9,12-13,18-0的时间段,有交叉的部分不计算就好了

你首先需要一个排班表用于判断是否是工作日。
如果小于9点,=9点,大于18点=18点,再用你1里面说的方法不久完了。
相关标签: php javascript