RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 871216
Accepted
Pavel
Pavel
Asked:2020-08-21 12:11:35 +0000 UTC2020-08-21 12:11:35 +0000 UTC 2020-08-21 12:11:35 +0000 UTC

消除时间计算中的错误

  • 772

有一个问题 - 消除工作日结束时间的错误。

我用拐杖解决了它,我真的很想看到一个好的解决方案的例子,我的代码如下,这里是问题陈述:

员工有 8 小时的 3 个班次:从 00:00 到 8:00 - 1 班,从 8:00 到 16:00 - 第二班,从 16:00 到第二天开始 - 第三班。同时,员工在不知道的时间内完成轮班的时间稍晚,但不超过一个轮班(或 8 小时)的规模。连续分配一名工人只工作一班。

移位数 1 或 2 或 3 称为输入参数。

如果员工已经工作并“爬”到其他人的班次,则有必要编写一个函数,该函数将返回上一班次最后一秒的日期和时间,而不是真正的结束时间。

例子:

1号班工人于2018年5月1日8:30交任务,函数应返回2018年5月1日7:59。在不准确的情况下,当从第 3 班转移到第 1 班时,必须考虑日期。

这是我的解决方案:

function computeLastUpdate(shiftNumber) {
    let lastUpdate = new Date();

    const beforeMidnight = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 23, 59, 59);
    const afterMidnight = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 0, 0, 0);
    const eightAM = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 8, 0, 0);
    const fourPM = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 16, 0, 0);

    if (shiftNumber === 1 && lastUpdate > eightAM && lastUpdate < fourPM) {

        lastUpdate = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 7, 59, 59);

    } else if (shiftNumber === 2 && lastUpdate > fourPM && lastUpdate < beforeMidnight) {

        lastUpdate = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate(), 15, 59, 59);

    } else if (shiftNumber === 3 && lastUpdate > afterMidnight && lastUpdate < eightAM) {

        lastUpdate = new Date(lastUpdate.getFullYear(), lastUpdate.getMonth(), lastUpdate.getDate() - 1, 23, 59, 59);

    }

    return lastUpdate;
}

看起来很麻烦,而且措辞с 16:00 до начала следующих суток有些混乱。一般来说,是否有可能更优雅地解决这个问题?

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Misha Saidov
    2020-08-22T00:19:30Z2020-08-22T00:19:30Z

    然后你可以适应这样的代码。这比您的示例可读性差,但始终如一

    function computeLastUpdate(shiftNumber) {
       let today = new Date(); //тут понятно
       let mustEndHours = shiftNumber * 8 - 1; //час, в который должна была закончится предыдущая смена
       today = (mustEndHours === 23 ? new Date(today - 1000 * 60 * 60 * 24) : today); //если это третья смена, то вычесть из сегодняшнего 1 день
       return new Date(today.getFullYear(), today.getMonth(), today.getDate(), mustEndHours, 59, 59);
    }
    

    如果社区纠正我示例中的潜在缺陷,我也会很高兴。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5