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;}