如何判断某个时间是否在时间段内?

比如从时间 2022-1-1 ~ 2022-12-31 这段时间段内,每隔 7 天做一次操作。
有一张表:

idstart_dateend_dateinterval (天)
12022-1-12022-12-317
22022-2-12222-12-111

想判断 2022-8-1 是否应该操作?

先查 sql:

select * from table where `start_date` <= '2022-8-1' and `end_date` >= '2022-8-1'

循环查询:


foreach($data as $key => $item) {
    $date = strtotime($item['start_date']);
    $range = [];
    while($date <= strtotime($item['end_date'])) {
        $date = strtotime("+ {$data['interval']} days", $date);
        $range[] = date('Y-m-d', $date);
    }

    if(!in_array('2022-8-1', $range)) {
        continue;
    } else {
        //do some thing
    }
}

这种方式 如果时间段太长 会超出内存大小, 有没有什么好的方式?

阅读 3.1k
2 个回答

不废话,直接上代码。这个还挺有意思的。

foreach ($data as $key => $item) {
    // 获取开始时间属于今年的第几天
    $start = date('z', strtotime($item['start_date']));

    // 获取今天属于第几天
    $current = date("z");

    // 算法:(今天的天数 - 开始的天数 ) / 7 的余数是不是 0
    if (($current - $start) % $item['interval'] == 0) {
        // do something
    }
}

你可以把 2022-08-01 以及 start_date 对应的值 转化为 时间戳, 然后取差值, 然后除以 86400(一天的秒) 再除以 7 看是否 整除

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题