如何检查某一日期时间是否处于多个时间区间内?
修正公式以检查多个时间区间
你的原公式只检查第一个区间的原因是:SPLIT(B1, "|")生成的是横向的区间数组,后续嵌套SPLIT("&")得到二维数组后,INDEX(...,1)和INDEX(...,2)默认仅提取该数组第一行的起始/结束时间,因此无法遍历所有区间。
以下是两种可行的修正方案:
方案1:使用BYROW遍历每个区间
=OR(BYROW(SPLIT(B1, "|"), LAMBDA(interval, ISBETWEEN(A1, INDEX(SPLIT(interval, "&"), 1), INDEX(SPLIT(interval, "&"), 2)))))
- 逻辑:
SPLIT(B1, "|")拆分出所有区间字符串,BYROW逐个处理每个区间,拆分出起始和结束时间后用ISBETWEEN判断,最后用OR汇总所有判断结果。
方案2:用FLATTEN转换数组维度
=OR(ISBETWEEN(A1, INDEX(SPLIT(FLATTEN(SPLIT(B1, "|")), "&"),,1), INDEX(SPLIT(FLATTEN(SPLIT(B1, "|")), "&"),,2)))
- 逻辑:
FLATTEN把横向的区间数组转为纵向,再拆分出所有起始/结束时间组成二维数组,INDEX(,,1)和INDEX(,,2)提取所有起始、结束时间列,ISBETWEEN会对每一组时间区间进行判断,最后OR返回是否存在符合条件的区间。
验证示例
假设:
- A1 =
2024-03-20 16:30:00 - B1 =
2024-03-20 15:00:00&2024-03-20 16:00:00|2024-03-20 20:15:00&2024-03-21 15:00:00
公式会返回FALSE(该时间不在任何区间内);若A1改为2024-03-20 21:00:00,则返回TRUE。
内容的提问来源于stack exchange,提问作者ihorc
相关产品推荐
相关产品推荐

