今天写个需求的时候,开始的想法是在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周')
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
对比了下日历
都对了!!