IOSAndroid开发iOS开发攻城狮的集散地

计算周内选择的时间段是否存在重复

2018-02-27  本文已影响24人  月球在此

也是遇到一个神奇的需求,需要选择一周内不同的时间段,且时间不能重合

IMG_2143584E108B-1.jpeg

我们先来解释一下单个时间段如何比较,然后在解释不同星期下如何对比

单个重叠的时间无非下列几种情况:

        if startTime1 >= startTime2 && startTime1 <= endTime2 {
            return true
        }else if endTime1 >= startTime2 && endTime1 <= endTime2 {
            return true
        }else if startTime2 >= startTime1 && startTime2 <= endTime1 {
            return true
        }else if endTime2 > startTime1 && endTime2 <= endTime1 {
            return true
        }

接下来说说如何判断星期内如何重叠,其实道理是一样的,只是拉长了时间段

如下图: Snip20180227_15.png
其实可以把每个时间段分割开来

每分钟60秒
每小时3600秒
每天86400秒
周日~周一这段时间S=0 E=86400
周一~周二 S=86400 E=2 * 86400
以此类推


Snip20180227_18.png
那么我们就是能知道上图的时间1(红色时间段)的时间理解为:
S = 1 * 86400 + 开始时间
E = 1 * 86400 + 结束时间 + 86400(次日)
时间2(蓝色时间段)的时间为:

S = 3 * 86400 + 开始时间
E = 3 * 86400 + 结束时间 + 86400(次日)
这样就能计算出时间段在一周内的范围

但是还有一个问题,如果超过周六到了下周如何计算

如下图

Snip20180227_19.png
这种情况,我们也可以进行切分,分成图中的前段时间和后段时间
首先判断是否超过本周
因为我们将每周分割成了7段,每段86400
那么只要结束时间超过了7*86400,我们就可以定义为周日的时间
前段时间:
S = 6 * 86400 + 开始时间
E = 7 * 86400
后段时间:
S = 0
E = 结束时间 - 7 * 86400
这样就获取到了两个时间段
虽然不难,也希望对有相同需求的朋友们有所帮助
github地址:https://github.com/CZXBigBrother
上一篇 下一篇

猜你喜欢

热点阅读