<?php /** * @param sdate 开始日期 * @param edate 结束日期 */ function get_weeks($sdate, $edate) { $range_arr = array(); // 检查日期有效性 check_date(array($sdate, $edate)); // 计算各个周的起始时间 do { $weekinfo = get_weekinfo_by_date($sdate); $end_day = $weekinfo['week_end_day']; $start = substr_date($weekinfo['week_start_day']); $end = 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; } /** * 检查日期的有效性 YYYY-mm-dd * @param array $date_arr * @return boolean */ 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)); } } /** * 截取日期中的月份和日 * @param string $date * @return string $date */ function substr_date($date) { if ( ! $date) return FALSE; return date('m-d', strtotime($date)); } /** * 根据指定日期获取所在周的起始时间和结束时间 */ function get_weekinfo_by_date($date) { $idx = strftime("%u", strtotime($date)); $mon_idx = $idx - 1; $sun_idx = $idx - 7; return array( 'week_start_day' => strftime('%Y-%m-%d', strtotime($date) - $mon_idx * 86400), 'week_end_day' => strftime('%Y-%m-%d', strtotime($date) - $sun_idx * 86400), ); } ?>
本文结束