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;
}

  

原文地址:https://www.cnblogs.com/gavinjunftd/p/9506178.html