PHP中如何取得指定年份第几周的具体日期范围?是否有现成的函数?
比如我现在想要2010年第10周对应的具体的日期范围。
-------------------------------------------------
下面我用自己写的函数实现了取这个日期范围的功能这里假设第1周指的是每年第1个完整的周):
/* 功能:获取指定年周对应的日期 参数1:年号,字符型或数值型 (例:2011) 参数2:周号,字符型或数值型 (例:4) 返回:时间戳型日期*/function getWeekNoToFirstDay($sYear,$sWeekNo){ $iFirstWeekDay = date('w',strtotime($sYear.'-01-01')); if($iFirstWeekDay != 1){//指定年的1月1号不是星期一 if($iFirstWeekDay === 0){//星期天 $iFirstWeekDay = 7; } $iAdjustDay = (8 - $iFirstWeekDay)+($sWeekNo-1)*7; $dateFirstFullWeekBeginDate = strtotime("+{$iAdjustDay} day",strtotime($sYear.'-01-01')); }else{ $iAdjustDay = ($sWeekNo-1)*7; $dateFirstFullWeekBeginDate = strtotime("+{$iAdjustDay} day",strtotime($sYear.'-01-01')); } return $dateFirstFullWeekBeginDate;}
/* 功能:获取指定年周对应的日期范围文本 参数1:年号,字符型或数值型 (例:2011) 参数2:周号,字符型或数值型 (例:4) 返回:字符型的不带年份的日期范围文字(例:"3.2-3.8")*/function getWeekNoToDateRange($sYear,$sWeekNo){ $dateTemp=getWeekNoToFirstDay($sYear,$sWeekNo); $sDateRange = date('n.j',$dateTemp).'-'.date('n.j',strtotime("+6 day",$dateTemp)); return $sDateRange;}
/* 功能:获取指定2个年周之间的周数 参数1:开始年号,字符型或数值型 (例:2011) 参数2:开始周号,字符型或数值型 (例:4) 参数1:结束年号,字符型或数值型 (例:2011) 参数2:结束周号,字符型或数值型 (例:26) 返回:数值型*/function getWeekNoToTotalWeeks($from_year,$from_week,$end_year,$end_week){ if(!$from_year or !$from_week or !$end_year or !$end_week){ return -1; } $time_from_yearweek=getWeekNoToFirstDay($from_year,$from_week); $time_end_yearweek=getWeekNoToFirstDay($end_year,$end_week); $total_weeks=($time_end_yearweek-$time_from_yearweek)/86400/7; if($total_weeks >= 0){ $total_weeks++; } return $total_weeks;}