【问题标题】:Check if date range is filled in Javascript with Node.js检查日期范围是否用 Node.js 填写 Javascript
【发布时间】:2013-07-27 21:17:29
【问题描述】:

我正在使用 Express 构建一个调度应用程序。我有一个显示月历的日历视图。

每一天都必须完全覆盖;无论轮班是否重叠,必须始终至少有一个人在轮班。

鉴于一天的一系列班次看起来像这样

{
    start: [javascript Date],
    end: [javascript Date],
    name: "James Bond",
    ...
}

如果需要更多班次来填充它,我想有条件地添加一个 CSS 类来突出显示这一天。

判断xy 之间的时间是否已满的最好方法是什么?

【问题讨论】:

  • 什么是最小的时间单位?小时/分钟/天?
  • 完全填满是什么意思?

标签: javascript node.js express momentjs


【解决方案1】:

你需要展示你已经尝试过的东西,但我会给你伪代码来解决这个问题的两种基本方法。

使用 either 方法,请确保您在轮班中使用半开间隔。这有几种不同的表示方式:

// interval notation:
[start, end)

// algebraicly
start <= value < end

// javascript and other code
start <= value && end > value 

方法#1

  • 在每个日期使用Date.getTime() 以获得每个日期的简单数字表示。
  • 查找实现Interval Tree 的库。
  • 将所有班次映射到树上。
  • 展平/合并树。
  • 寻找差距。

方法#2

  • 初始化计数器i = 0
  • 初始化字典或键/值对列表。
  • 对于列表中的每个班次:
    • 如果您的开始日期 x 在轮班中,则递增 i
    • 查看开始时间是否在字典中。
      • 如果没有,则添加它,键为开始日期时间,值为1
      • 如果它已经在字典中,则增加值。
    • 查看结束时间是否在字典中。
      • 如果没有,添加它,键为开始日期时间,值为-1
      • 如果它已经在字典中,则减小该值。
  • 按日期时间键对字典进行排序。
  • 查字典,从x开始。
    • i 应该从当前工作的人数开始。
    • 将每个字典项的值添加到您的计数器i
    • 如果i == 0 则没有人在工作。返回 false 或错误。
    • 如果你遵循了这个逻辑,那么i 永远不会是负数。如果是则出错。
    • 继续直到结束日期y

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多