算法:根据周数获得明年工作班次类型

时间:2017-11-30 06:00:57

标签: algorithm datetime week-number

我三班倒,每周不同。订单是早班(m),第一晚(n)和下午一(a)。我固定的订单,即它永远不会改变,即使那个星期没有工作。

我创建了一个获取ISO周号的函数。当我扔一个日期时,它会返回周数。

本周(第48号),例如,我上午工作,48 % 3 = 0 → m = 0; n = 1; a = 2。 我将其保存到数组shifts = ["m", "n", "a"]

这很容易。但随着今年年底的到来,我需要解决一个问题。由于52(2017年的总周数)不能被3整除,并且在不同年份有不同的周数,模0(2017年意味着m),意味着不同年份的其他东西。< / p>

所以,实际的问题是什么是最快最简单的算法(比最简单的最快),不需要人类可读,并解释(如果需要)为什么/如何做到这一点确实

我想到了一个(既不快也不简单):对已知的一周没有。 &安培; shift类型组合添加该周之后的周数,直到年末,并重新计算数组的变化。

1 个答案:

答案 0 :(得分:1)

为什么要使用ISO周数? 让我们说你的星期几天开始(星期一,星期天,你决定)。您决定班次d0的开始日期0,也是一周的开始日期。然后,对于任何日期d,您的转变是:

shift = floor(nbdays(d - d0) / 7) mod 3

如果您的系统在一周的开始日期不同的不同区域中工作,则可能会出现问题。在这种情况下,您应该为每个区域设置具有特定的d0。如果您的shift在全球范围内相同,那么您就没有问题。