php获取指定日期之间的各个周和月的起止时间
|
根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间 日志格式化类 Date.class.php 代码如下: strftime('%Y-%m-%d',strtotime($date) - $mon_idx * 86400), 'week_end_day' => strftime('%Y-%m-%d',strtotime($date) - $sun_idx * 86400), ); } /** * 根据指定日期获取所在月的起始时间和结束时间 */ public function get_monthinfo_by_date($date){ $ret = array(); $timestamp = strtotime($date); $mdays = date('t',$timestamp); return array( 'month_start_day' => date('Y-m-1',$timestamp), 'month_end_day' => date('Y-m-'.$mdays,$timestamp) ); } /** * 获取指定日期之间的各个周 */ public function get_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; } /** * 获取指定日期之间的各个月 */ public function get_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.'+1 month')); }while($end_day < $edate); return $range_arr; } /** * 截取日期中的月份和日 * @param string $date * @return string $date */ public function substr_date($date) { if ( ! $date) return FALSE; return date('m-d',strtotime($date)); } /** * 检查日期的有效性 YYYY-mm-dd * @param array $date_arr * @return boolean */ public function check_date($date_arr) { $invalid_date_arr = array(); foreach ($date_arr as $row) { $timestamp = strtotime($row); $standard = date('Y-m-d',$timestamp); if ($standard != $row) $invalid_date_arr[] = $row; } if ( ! empty($invalid_date_arr)) { die("invalid date -> ".print_r($invalid_date_arr,TRUE)); } } } 类文件的使用 代码如下: 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"
}
*/
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
