首页 > 解决方案 > 验证字符串时间范围

问题描述

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

  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. 交叉日无效: 在此处输入图像描述

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

标签: javascriptalgorithmlogic

解决方案


当 allowedFinalTime < allowedInitialTime 时,可以考虑将 24h 添加到 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;
}


推荐阅读