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

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

场景

中文描述

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

代码示例

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

 //计算周
    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;
    }

你可能感兴趣的:(php)