PHP 根据年、周数获取周的起止日期

PHP 根据年、周数获取周的起止日期,第1张

我也是来找答案的,结果发现两位仁兄都差了点。

那就让我补上这最后这点吧

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如何获取本周和本月的数据进行排行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9350267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存