【问题标题】:Find current work shift from table从表中查找当前工作班次
【发布时间】:2017-02-27 18:36:49
【问题描述】:

我正在为轮班时间创建一个表格,每天都有自己的开始/结束时间。下表仅显示星期日和星期一,但实际表格将有 7 天。我希望能够根据当前时间显示当前班次(desc)。这是直截了当的,直到我上第三班,特别是午夜过后。如果是周一早上 5 点,那实际上是周日的第三班。我该如何解决这个问题,或者让桌子工作,或者是否有更好的方法来解决它?

ID  Desc Sunday_Start  Sunday_End  Monday_Start  Monday_End
1   1st  07:00:00      15:00:00    07:00:00      15:00:00
2   2nd  15:00:00      23:00:00    15:00:00      23:00:00
3   3rd  23:00:00      07:00:00    23:00:00      07:00:00

我注意到这个帖子, DateTime range issue when time passes midnight,但它看起来主要是为了每天可重复的转变。

客户真的希望每一天都与众不同。我还没有决定是用 MySQL 还是只用 XML。所以,一个问题,有没有更好的方法来做到这一点?我正在搜索日历并使用重复约会,但我没有看到任何值得的免费活动。有人对此有任何见解吗?

我正在使用 Visual Studio 2015 vb.net 和 MySQL。

【问题讨论】:

  • 您可能希望将数据保存为 Start Time 和 Shift Length 而不是 Shift_End。您仍然可以将其显示为时间,但它会使数学变得更容易。
  • 每天/班次组合也应该有一行。
  • 我有错误的链接,我将使用 TimeSpan,所以数学不是问题。此外,不确定行/表的排列是否会有很大的不同。感谢 Trevor 和 Paul 的回复,但对我的帖子没有太大帮助。
  • 我们确实回答了詹姆斯的问题。如果您有一个简单的表格,每行一个班次,一天,开始时间和持续时间。在给定当前日期和时间的情况下,找出当前的行是一件简单的事情。
  • (好的)数据库设计的重点是摆脱这样的重复列。

标签: mysql vb.net calendar schedule


【解决方案1】:

你的轮班表应该是这样的......

与 excel 不同,数据库应始终为每个“项目”提供一条记录(行)...

注意我使用了 Shift_Length 而不是 Shift_End。 Shift_Length 以小时为单位。因此可以从两者计算 Shift_End。

现在搜索当前班次只需确定当前日期和时间是否在指定日期的 Shift_Length 和 Start_Time 内。

【讨论】:

  • 我可以同意这一点,但我仍然不明白这如何帮助我确定通过午夜边界时的转变。假设一周有 7 天,星期日 = 0 和星期六 = 6,如果是星期一,那么就是 1。如果是星期二凌晨 1 点,那仍然是星期一的第三班,但是,天的值是 2。所以,建议如果我们处于这个时期,只需减去 1?我想这对我来说似乎很笨拙。我很难弄清楚这个午夜的界限。
  • 您仍然需要进行两步测试.. 一个与今天匹配,如果您没有匹配...检查昨天。
  • 我的问题是有时会出现没有匹配的情况,在当天,也可能在前一天。在这些情况下,没有匹配并不意味着查看前一天。轮班时间并不总是无缝的。客户可能只有一班和三班,不知道为什么,但我需要考虑这方面的所有可能性
  • 如果有停机时间......该方法会发现它没有问题。真正令人担忧的是轮班重叠......然后你就搞砸了。
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2012-08-25
相关资源
最近更新 更多