两个日期这间的间隔天数

复制代码
/**
     * 两个日期这间的间隔天数
     * @param $date1
     * @param $date2
     * @return float
     */
    public static function daysBetweenDates($date1, $date2)
    {
        $days = floor(abs($date1 - $date2) / 86400);
        return $days;
    }

    /**
     * 获取两个时间间隔之间的所有日期
     * @param string|int $minDay like "2015-05-05" or unix_timestamp
     * @param string|int $maxDay like "2015-06-05" or unix_timestamp
     * @return array  ['2015-050-05','2015-05-06',...]
     */
    public static function getAllDays($minDay, $maxDay)
    {
        $minTime = is_numeric($minDay) ? intval($minDay) : strtotime($minDay);
        $maxTime = is_numeric($maxDay) ? intval($maxDay) : strtotime($maxDay);
        $res = [];
        for ($current = $minTime; $current <= $maxTime; $current = strtotime(date("Y-m-d", $current) . " +1 day")) {
            $res[] = date("Y-m-d", $current);
        }
        return $res;
    }

    /**
     * 获取两个时间间隔之间的所有星期 (当年的第几周)
     * @param string|int $minDay like "2015-05-05" or unix_timestamp
     * @param string|int $maxDay like "2015-06-05" or unix_timestamp
     * @return array  ['2015 05','2015 06',...]
     */
    public static function getAllWeeks($minDay, $maxDay)
    {
        $minTime = is_numeric($minDay) ? intval($minDay) : strtotime($minDay);
        $maxTime = is_numeric($maxDay) ? intval($maxDay) : strtotime($maxDay);
        $year = date("Y", $minTime);
        $week = intval(date("N", $minTime));
        $startTime = $minTime - ($week - 1) * 86400;
        $startYear = date("Y", $startTime);
        if ($startYear != $year) {
            $startTime = strtotime("{$year}-01-01");
        }
        $endWeek = intval(date("N", $maxTime));
        $endTime = $maxTime + (7 - $endWeek) * 86400;
        $res = [];
        for ($current = $startTime; $current <= $endTime; $current = strtotime(date("Y-m-d", $current) . " +1 week")) {
            $res[] = date("Y W", $current);
        }
        return $res;
    }

    /**
     * 获取两个时间间隔之间的所有星期 (第几周)
     * @param string|int $minDay like "2015-05-05" or unix_timestamp
     * @param string|int $maxDay like "2015-06-05" or unix_timestamp
     * @return array  ['2015-05','2015-06',...]
     */
    public static function getAllMonth($minDay, $maxDay)
    {
        $minTime = is_numeric($minDay) ? intval($minDay) : strtotime($minDay);
        $maxTime = is_numeric($maxDay) ? intval($maxDay) : strtotime($maxDay);
        $startTime = strtotime(date("Y-m-01", $minTime));
        $res = [];
        for ($current = $startTime; $current <= $maxTime; $current = strtotime(date("Y-m-d", $current) . " +1 month")) {
            $res[] = date("Y-m", $current);
        }
        return $res;
    }
复制代码

 

posted @   一个人的孤独自白  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示