//本功能纯属当前项目需要所写,有更好的方法欢迎大家留言探讨 |
//计算日期所在月份的起始和结束时间 |
function getMonthRange( $date ){ |
$ret = array (); |
$timestamp = strtotime ( $date ); |
$mdays = date ( 't' , $timestamp ); |
$ret [ 'sdate' ]= strtotime ( date ( 'Y-m-1 00:00:00' , $timestamp )); |
$ret [ 'edate' ]= strtotime ( date ( 'Y-m-' . $mdays . ' 23:59:59' , $timestamp )); |
return $ret ; |
} |
//时间分段显示 |
function getTimePartRange( $year , $month , $part ){ //年、月,分组个数 |
$nyear = date ( 'Y' ,time()); |
$nmonth = date ( 'm' ,time()); |
$nday = date ( 'd' ,time()); |
$retday = getMonthRange( $year . '-' . $month . '-' . $nday ); |
$sdate = date ( 'd' , $retday [ 'sdate' ]); |
$edate = date ( 'd' , $retday [ 'edate' ]); |
|
if ( $year == $nyear && $month == $nmonth ){ |
$edate = $nday ; |
} |
for ( $i =1; $i <= $edate ; $i ++){ |
$timeArray [] = $i ; |
} |
$countAry = count ( $timeArray ); |
$intAry = floor ( $countAry / $part ); //舍去法取整,为0的时候,表示分组个数大于了日期数,多出的分组个数值为0 |
$modAry = $countAry % $part ; //取余数 |
$modDay = $part - $modAry ; //计算多余天数的分配起始位置 |
|
//将时间切割出时段 |
$z = 0; |
if ( $intAry !=0){ |
$d = $intAry ; |
} else { |
$d = 1; |
} |
for ( $i =1; $i <= $part ; $i ++){ |
$timePart [ $i ] = array_slice ( $timeArray , $z , $d ); |
$z += $d ; |
if ( $intAry !=0){ |
if ( $i == $modDay ){ |
$d = $d +1; |
} |
} |
} |
|
return $timePart ; |
} |
//调用实例 |
$timePart = getTimePartRange(2015,4,7); //年,月,分组个数 |
foreach ( $timePart as $k => $v ){ |
$datePart [ $k ][ 'sdate' ] = $year . '-' . $month . '-' . $v [0]. ' 00:00:00' ; |
$datePart [ $k ][ 'edate' ] = $year . '-' . $month . '-' . end ( $v ). ' 23:59:59' ; |
} |