• PHP 获取周,月列表


    PHP的date函数以及strtotime函数是很强大的。基本上围绕这2个函数就能处理绝大多数日常开发中日期的处理。

    假设有一个需求是按周,月获取最近7周和最近7月的查询。那么我们肯定要划分出时间区间。

    #先按月划分,获取上个月

    我们一开始肯定想到这多简单啊

    echo date("Y-m-01",strtotime('-1 months'));

    但是有没有想过如果是发生在7月的31号(写这篇随笔是8月份)结果是如何。

    echo date("Y-m-01",strtotime('-1 months',strtotime('2018-07-31')));

    结果是2018-07-01 这不是当月吗?这个就是问题的关键,-1 months只会-30天而已。

    最终的方法应该是

    echo date("Y-m-01",strtotime(date('Y-m-1').' -1 months'));//这里是表示在当月第一天进行减,这样就避免了31号的情况

    #然后我们按周获取,这里周统计可能会出现的坑就是 date('w')为周日的时候是为0.

    $testDate = '2018-08-12';
    while ($num>0){
        //判断当前的天数
        $weekdays = date('w',strtotime($testDate))==0?6:date('w',strtotime($testDate))-1;
        //这里还要递增
        $weekdays += 7*(7-$num);
        $startTime = date('Y-m-d',strtotime('-'.$weekdays.' days',strtotime($testDate)));
        echo $startTime.PHP_EOL;
        $num--;
    }

    #整理后的函数,可直接使用

    <?php
    $num = 7;
    $testDate = '2018-08-12';
    print_r(getWeeks($testDate,$num));
    print_r(getMonths($testDate,$num));
    
    function getWeeks($date,$num=7){
        $weekdaysArr = [];
        while ($num>0){
            //判断当前的天数
            $weekdays = date('w',strtotime($date))==0?6:date('w',strtotime($date))-1;
            //这里还要递增
            $weekdays += 7*(7-$num);
            $startTime = date('Y-m-d',strtotime('-'.$weekdays.' days',strtotime($date)));
            $weekdaysArr[]= $startTime;
            $num--;
        }
        return $weekdaysArr;
    }
    
    function getMonths($date,$num=7){
        $monthsArr = [];
        while ($num>0){
            $startTime = date("Y-m-01",strtotime(date('Y-m-1',strtotime($date)).' -'.(7-$num).' months'));
            $monthsArr[]= $startTime;
            $num--;
        }
        return $monthsArr;
    }
    

      

  • 相关阅读:
    Java Gradle
    C/C++ C++11新特性
    C/C++ C++11原子类型和内存序
    基于流的编程(Flow-Based Programming)
    算法和数据结构 筛法求素数
    数据库 悲观锁和乐观锁
    数据库 事务隔离级别
    Serverless 的 AI 写诗,程序员浪漫起来谁能顶得住啊!
    亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
    腾讯云云函数 SCF Node.js Runtime 最佳实践
  • 原文地址:https://www.cnblogs.com/gavinjunftd/p/9506178.html
Copyright © 2020-2023  润新知