我们考虑了换班计划



许多人的工作时间表是可变的。 此计划的问题在于,很难快速计算出任何日期是工作日或休息日。 有许多在线服务可用于计算轮班时间表,但您脑中更容易做到这一点。 本文将考虑任何轮班时间表的计算算法。

就像“计算周中的每一天”一文中一样,该算法将基于月份的偏差。

本文将考虑工作时间表3/3。 即 在我们的情况下,“周”将持续6天:

  1   2   3   1   2   3 

最重要的是,在计算一年的第一个月的偏移量时不要犯错。 随后的所有月份将取决于此。

例如,假设一年的第一个工作日为1月2日,即 1月2、3和4日-工人分别休息5、6、7天。

就我而言
12月31日-工作日1
1月3日-工作日2
1月4日-工作日3
因此,为了简化计算,假设1月2日,3日,4日为工作日。
这对于计算一月份的偏差很重要。

从上面,我们获得一月份的日历:



绿色单元格是工作日,红色单元格是周末。

连续的天数等于“周”中的天数,在我们的示例中为6。

1月1日-休息日3;
1月2日-工作日1(“周”开始)。

在该月的第一天之前,有5个空的黄色单元格,这意味着在我们的情况下,一月份的偏移量将为5。

继续,我们获得2月(非-年)的日历:



如您所见,由于月份从第一个工作日开始,所以2月的偏移量为0。

明年三月:



3月的偏移量是4,而4月的偏移量是5,因为4月的第一天是“周”的第六天,并且前面有5个空方格。

然后我们算到需要的月份。

就我而言,前6个月的抵消额为:
5、0、4、5、5、5-1月,2月,3月,4月,5月和6月。 记住6位数字并不难。

要计算是工作日还是休息日,您需要在日期中加上月份偏移量,然后按“周”的持续时间找到除法的余数:

$$显示$$剩余=(日期+偏移量\;月)\%(持续时间\;“周”)$$显示$$

根据余额,确定日期:

1、2和3-工作日
4、5和0-周末

例如,对于2月23日:23(日期)+ 0(2月偏移量)=23。其余23%6 = 5,这是第二天休息。

对于3月8日:8(日期)+ 4(3月的班次)=12。12%6 =0。这意味着3月8日是休息的最后一天,3月9日开始工作。

另一个要固定的示例:

4月22日+ 5(4月的偏移量)= 27,除以6的余数是3-最后一个工作日。

该算法的缺点是休假后违反了时间表:必须重新计算偏移表或休假以免违反时间表。 例如,如果您在3 个工作日后休假“连续工作日数” *“奇数”天(休假3、9、15、21天),则不会违反本文中讨论的时间表。

使用此算法,您可以在几秒钟内计算出任何一天,而无需日历或在线服务。

Source: https://habr.com/ru/post/zh-CN440270/


All Articles