php获取指定日期之间的各个周和月的起止时间
根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间
日志格式化类Date.class.php
<?php classDatefmt{ function__construct(){} /** *根据指定日期获取所在周的起始时间和结束时间 */ publicfunctionget_weekinfo_by_date($date){ $idx=strftime("%u",strtotime($date)); $mon_idx=$idx-1; $sun_idx=$idx-7; returnarray( 'week_start_day'=>strftime('%Y-%m-%d',strtotime($date)-$mon_idx*86400), 'week_end_day'=>strftime('%Y-%m-%d',strtotime($date)-$sun_idx*86400), ); } /** *根据指定日期获取所在月的起始时间和结束时间 */ publicfunctionget_monthinfo_by_date($date){ $ret=array(); $timestamp=strtotime($date); $mdays=date('t',$timestamp); returnarray( 'month_start_day'=>date('Y-m-1',$timestamp), 'month_end_day'=>date('Y-m-'.$mdays,$timestamp) ); } /** *获取指定日期之间的各个周 */ publicfunctionget_weeks($sdate,$edate){ $range_arr=array(); //检查日期有效性 $this->check_date(array($sdate,$edate)); //计算各个周的起始时间 do{ $weekinfo=$this->get_weekinfo_by_date($sdate); $end_day=$weekinfo['week_end_day']; $start=$this->substr_date($weekinfo['week_start_day']); $end=$this->substr_date($weekinfo['week_end_day']); $range="{$start}~{$end}"; $range_arr[]=$range; $sdate=date('Y-m-d',strtotime($sdate)+7*86400); }while($end_day<$edate); return$range_arr; } /** *获取指定日期之间的各个月 */ publicfunctionget_months($sdate,$edate){ $range_arr=array(); do{ $monthinfo=$this->get_monthinfo_by_date($sdate); $end_day=$monthinfo['month_end_day']; $start=$this->substr_date($monthinfo['month_start_day']); $end=$this->substr_date($monthinfo['month_end_day']); $range="{$start}~{$end}"; $range_arr[]=$range; $sdate=date('Y-m-d',strtotime($sdate.'+1month')); }while($end_day<$edate); return$range_arr; } /** *截取日期中的月份和日 *@paramstring$date *@returnstring$date */ publicfunctionsubstr_date($date){ if(!$date)returnFALSE; returndate('m-d',strtotime($date)); } /** *检查日期的有效性YYYY-mm-dd *@paramarray$date_arr *@returnboolean */ publicfunctioncheck_date($date_arr){ $invalid_date_arr=array(); foreach($date_arras$row){ $timestamp=strtotime($row); $standard=date('Y-m-d',$timestamp); if($standard!=$row)$invalid_date_arr[]=$row; } if(!empty($invalid_date_arr)){ die("invaliddate->".print_r($invalid_date_arr,TRUE)); } } }
类文件的使用
<?php require_once"Datefmt.class.php"; $datefmt=newDatefmt(); //输出11月1日和30日之间的各周 var_dump($datefmt->get_weeks('2014-11-05','2014-11-29')); /*结果为 array(4){ [0]=> string(13)"11-03~11-09" [1]=> string(13)"11-10~11-16" [2]=> string(13)"11-17~11-23" [3]=> string(13)"11-24~11-30" } */ //输出2月1日和11月30日 var_dump($datefmt->get_months('2014-02-03','2014-11-29')); /*结果为 array(10){ [0]=> string(13)"02-01~02-28" [1]=> string(13)"03-01~03-31" [2]=> string(13)"04-01~04-30" [3]=> string(13)"05-01~05-31" [4]=> string(13)"06-01~06-30" [5]=> string(13)"07-01~07-31" [6]=> string(13)"08-01~08-31" [7]=> string(13)"09-01~09-30" [8]=> string(13)"10-01~10-31" [9]=> string(13)"11-01~11-30" } */