算法:根据周数获取下一年日期工作班次类型
algorithm: get next year date work shift type according week number
我工作三班倒,每周换一个。顺序是早班(m
)、晚班(n
)和下午班(a
)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。
我创建了一个函数来获取 ISO 周数。当我给它一个日期时,它 returns 周数。
本周(第 48 期),例如,我早上工作,因此 48 % 3 = 0 → m = 0; n = 1; a = 2
。
我将其保存到数组 shifts = ["m", "n", "a"]
.
这是简单的部分。但是年关将至,我需要解决一个问题。由于 52(2017 年的总周数)不能被 3 整除,并且不同年份的周数不同,模 0(对于 2017 年意味着 m
),意味着不同年份的其他东西。
所以,真正的问题是什么是最快和最简单的算法(而不是最简单的最快),不需要人类可读,有解释(如果需要)why/how它的作用。
我想到了一个(既不快也不简单):到已知周数。 & shift type combo 加上该周之后到年底的周数,并重新计算数组 shifts。
为什么要使用 ISO 周数?
假设您的周从某个特定的日子开始(星期一、星期日,由您决定)。您决定班次 d0
的开始日期 d0
,也是一周的开始。那么对于任何日期 d
,您的班次是:
shift = floor(nbdays(d - d0) / 7) mod 3
如果您的系统在一周的起始日不同的不同区域工作,可能会出现问题。在那种情况下,您应该为每个区域设置一个特定的 d0
。如果您的 shift
在世界范围内都是一样的,您就没有问题。
我工作三班倒,每周换一个。顺序是早班(m
)、晚班(n
)和下午班(a
)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。
我创建了一个函数来获取 ISO 周数。当我给它一个日期时,它 returns 周数。
本周(第 48 期),例如,我早上工作,因此 48 % 3 = 0 → m = 0; n = 1; a = 2
。
我将其保存到数组 shifts = ["m", "n", "a"]
.
这是简单的部分。但是年关将至,我需要解决一个问题。由于 52(2017 年的总周数)不能被 3 整除,并且不同年份的周数不同,模 0(对于 2017 年意味着 m
),意味着不同年份的其他东西。
所以,真正的问题是什么是最快和最简单的算法(而不是最简单的最快),不需要人类可读,有解释(如果需要)why/how它的作用。
我想到了一个(既不快也不简单):到已知周数。 & shift type combo 加上该周之后到年底的周数,并重新计算数组 shifts。
为什么要使用 ISO 周数?
假设您的周从某个特定的日子开始(星期一、星期日,由您决定)。您决定班次 d0
的开始日期 d0
,也是一周的开始。那么对于任何日期 d
,您的班次是:
shift = floor(nbdays(d - d0) / 7) mod 3
如果您的系统在一周的起始日不同的不同区域工作,可能会出现问题。在那种情况下,您应该为每个区域设置一个特定的 d0
。如果您的 shift
在世界范围内都是一样的,您就没有问题。