计算两个时间中的每个周的开始时间和结束时间

计算两个时间中的每个周的开始时间和开始时间
场景 中文描述
【计算两个时间中的每个周的开始时间和结束时间】计算两个时间中的每个周的开始时间和开始时间
代码示例 计算两个时间中的每个周的开始时间和结束时间

//计算周 private function _week($sDate, $eDate) { $range_arr = array(); // 检查日期有效性 $this->check_date(array($sDate, $eDate)); // 计算各个周的起始时间 do { $range= []; $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"]= $start; $range["end"]= $end; $range["current"] = date("Y-m", strtotime($start)); $range["week"]= date("W", strtotime($start)); $range_arr[]= $range; $sDate= date('Y-m-d', strtotime($sDate) + 7 * 86400); } while ($end_day < $eDate); return $range_arr; }/** * 截取日期中的月份和日 * @param string $date * @return string $date */ private function substr_date($date) { if (!$date) return false; return date('Y-m-d', strtotime($date)); }/** * 根据指定日期获取所在周的起始时间和结束时间 */ private 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), ); }/** * 检查日期的有效性 YYYY-mm-dd * @param array $date_arr * @return bool */ private 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)) { return false; } return true; }

    推荐阅读