今天写个需求的时候,开始的想法是在sql 语句实现,但一个早上的时间就花费在了这上面,中途我也问了一些大佬,都叫我从代码层面去实现,我只是想着从sql语句实现要便捷一点,就不用在代码实现,所以最终还是从代码层面去实现了。
一、数据库端
我在数据库弄了写了sql语句,最终输出这样的(因为要做统计):
sql语句:

select p.userid,a.admin_name as name,date_format(from_unixtime(create_time,'%Y-%m-%d %H:%i:%s'), '%Y年%u周') as month,count(*) as count from mr_vistit as p left join mr_admin as a on a.id=p.userid group by p.userid,date_format(from_unixtime(create_time,'%Y-%m-%d %H:%i:%s'), '%Y年%u周')

l1djusmj.png
month这一列我输出年和周次,是为了去PHP里方便。当然也看各自的想法了
二、PHP代码

/**
 * @param $year  年份
 * @param $weeknum  周次
 * 通过周次去获取本周的起始和结束日期
 */
function getWeekDate($year, $weeknum)
{
    $firstdayofyear = mktime(0, 0, 0, 1, 1, $year);
    $firstweekday = date('N', $firstdayofyear); //星期数
    $firstweenum = date('W', $firstdayofyear); //周数
    if (intval($firstweenum) == 1) {
        $day = (1 - ($firstweekday - 1)) + 7 * ($weeknum - 1);
    } else {
        $day = (9 - $firstweekday) + 7 * ($weeknum - 1);
    }
    $startdate = date('Y-m-d', mktime(0, 0, 0, 1, $day, $year));
    $enddate = date('Y-m-d', mktime(0, 0, 0, 1, $day + 6, $year));
    echo $startdate . "至" . $enddate;
}

接下来,我测试一下(直接调用):

getWeekDate(2022,13);

最终输出 2022-03-28至2022-04-03
对比了下日历
l1dk7rh9.png

都对了!!

最后修改:2022 年 03 月 30 日
如果觉得我的文章对你有用,请随意赞赏