我也是来找答案的,结果发现两位仁兄都差了点。
那就让我补上这最后这点吧
function getFirstDayOfWeek($year,$week)
{
$first_day = strtotime($year"-01-01");
$is_monday = date("w", $first_day) == 1;
$week_one_start = !$is_monday strtotime("last monday", $first_day) : $first_day;
return $year'第'$week'周开始天:'date('Y-m-d',$week_one_start+(3600247($week-1)))
';结束天为:'date('Y-m-d',$week_one_start+((360024)(7($week-1)+6)));
}
自己理了一下思路,因为我做的时候sql语句里用的是小于和大于,所以直接统计到下一天的0点。最后返回的是数组。
//开始时间
$startDate = "2013-12-12";
//结束时间
$endDate = "2013-12-16";
//跨越天数
$n = (strtotime($endDate)-strtotime($startDate))/86400;
//结束时间加一天(sql语句里用的是小于和大于,如果有等于的话这句可以不要)
$endDate = date("Y-m-d 00:00:00",strtotime("$endDate +1 day"));
//判断,跨度小于7天,可能是同一周,也可能是两周
if($n<7){
//查开始时间 在 那周 的 位置
$day = date("w",strtotime($startDate))-1;
//查开始时间 那周 的 周一
$week_start = date("Y-m-d 00:00:00",strtotime("$startDate -{$day} day"));
//查开始时间 那周 的 周末
$day = 7-$day;
$week_end = date("Y-m-d 00:00:00",strtotime("$startDate +{$day} day"));
//判断周末时间是否大于时间段的结束时间,如果大于,那就是时间段在同一周,否则时间段跨两周
if($week_end>=$endDate){
$weekList[] =array($startDate,$endDate);
}else{
$weekList[] =array($startDate,$week_end);
$weekList[] =array($week_end,$endDate);
}
}else{
//如果跨度大于等于7天,可能是刚好1周或跨2周或跨N周,先找出开始时间 在 那周 的 位置和那周的周末时间
$day = date("w",strtotime($startDate))-1;
$week_start = date("Y-m-d 00:00:00",strtotime("$startDate -{$day} day"));
$day = 7-$day;
$week_end = date("Y-m-d 00:00:00",strtotime("$startDate +{$day} day"));
//先把开始时间那周写入数组
$weekList[] =array($startDate,$week_end);
//判断周末是否大于等于结束时间,不管大于(2周)还是等于(1周),结束时间都是时间段的结束时间。
if($week_end >= $endDate){
$weekList[] = array($week_end,$endDate);
}else{
//N周的情况用while循环一下,然后写入数组
while($week_end <= $endDate){
$start = $week_end;
$week_end = date("Y-m-d 00:00:00",strtotime("$week_end +7 day"));
if($week_end <= $endDate){
$weekList[] = array($start,$week_end);
}else{
$weekList[] = array($start,$endDate);
}itjob
}
}
}
计算本周的,需要对今天进行判断,先计算出是星期几,然后计算出星期一是 几月几号,在算出星期天是几月几号, 然后在写到sql中,比如 2009-03-09到2009-03-15的话,sql就是
SELECT count( ID ) AS c FROM dede_archives WHERE UNIX_TIMESTAMP( '2009-03-15') > pubdate > UNIX_TIMESTAMP('2009-03-09') 下面还有一例。本月统计(MySQL)
select from booking where month(booking_time) = month(curdate()) and year(booking_time) = year(curdate())本周统计(MySQL)
select from spf_booking where month(booking_time) = month(curdate()) and week(booking_time) = week(curdate())
$w=5;//求周五
echo getLastWeekNo(2017,2,$w);
/
求某年 某月 最后一周 周几的日期
@param unknown $year 年
@param unknown $month 月
@param unknown $weekNo 求周几(周日传0)
@return string 最后周$weekNo的日期
/
function getLastWeekNo($year,$month,$weekNo){
//设置时区
date_default_timezone_set('PRC');
//求当月第一天
$beginDate=date('Y-m-01', strtotime($year'-'$month'-01'));
//当月最后一天时间戳
$endDate=strtotime("$beginDate +1 month -1 day");
//求最后一天是周几
$numberWk=intval(date("w",$endDate));
//如果所求周几跟当前日期相等则直接返回日期
if($numberWk==$weekNo){
$strTime=$endDate;
}else{
//计数器
$j=0;
//计算所求的周几数跟最后一天相差的天数
while($numberWk!=$weekNo) {
if($numberWk==0){
$numberWk=6;
}else{
$numberWk=$numberWk-1;
}
$j++;
}
//求相差天数后的日期
$strTime=strtotime(date('Y-m-d',$endDate)" -$j day");
}
return date('Y-m-d',$strTime);
}
以上就是关于PHP 根据年、周数获取周的起止日期全部的内容,包括:PHP 根据年、周数获取周的起止日期、PHP计算时间段内有几个周、PHP如何获取本周和本月的数据进行排行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)