【问题标题】:Validate string time range验证字符串时间范围
【发布时间】:2021-09-23 14:13:59
【问题描述】:

我需要创建一个函数来验证以下情况:

  1. 营业时间内的监控间隔:

  2. 开放时间以外的监控间隔:

还有一种可能是允许的开始范围是 23:00 到 04:00。在这种情况下,不允许使用 5:00 到 6:00 和 21:00 到 22:00 的范围。

目前我的代码正常验证日期,但交叉的日期没有。

export default function isOutRangeStringTime({
  initialTime,
  finalTime,
  allowedInitialTime,
  allowedFinalTime,
}) {
  if (allowedInitialTime === allowedFinalTime
    || allowedInitialTime >= allowedFinalTime
    || initialTime >= finalTime) {
    return false;
  }
  return initialTime < allowedInitialTime || finalTime > allowedFinalTime;
}

这是我的代码不起作用的情况的图片。

  1. 跨日有效:

  2. 交叉日无效:

我也需要验证才能跨天工作。

【问题讨论】:

    标签: javascript algorithm logic


    【解决方案1】:

    当 allowedFinalTime

    考虑使用日期对象。 为简单起见,此示例使用数字:

    function isOutRangeStringTime(
      initialTime,
      finalTime,
      allowedInitialTime,
      allowedFinalTime,
    ) {
      if (allowedInitialTime === allowedFinalTime
        || initialTime === finalTime) {
        return false;
      }
     if( allowedInitialTime > allowedFinalTime ) {
         allowedFinalTime += 24
         initialTime = (initialTime < allowedInitialTime) ? initialTime + 24 : initialTime;
         finalTime = (finalTime < allowedInitialTime) ? finalTime + 24 : finalTime;
     }
    
        return initialTime > allowedInitialTime && finalTime < allowedFinalTime;
    }
    
    

    【讨论】:

    • 我将尝试用数据对象来模拟它,但使用你说的数字是行不通的。在某些情况下,这些值可以是小时的几分之一,例如:15:45 - 19:20。谢谢你,你给了我一条新路
    • 将您的字符串转换为 Date 对象。当 allowedFinalTime 时添加 24h
    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多