获取最近7天,7周,7月

/**
 * 获取最近七天
 * @param string $date
 * @param string $format
 * @return array
 */
public static function getSevenDay($date = '', $format = 'Y-m-d')
{
    $time = $date ? strtotime($date) : time();
    //组合数据
    $out_data = [];
    for ($i = 1; $i <= 7; $i++) {
        $out_data[$i - 1] = date($format, strtotime('+' . $i - 7 . ' days', $time));
    }
    return $out_data;
}



/**
 * 获取最近七月的日期,大于等于1
 * @param string $date
 * @return array
 */
public static function getLastSevenMonth($date = '') {
    $result = [];
    $month = $date ? date('m',strtotime($date)) : date('m');
    $year = $date ? date('Y',strtotime($date)) : date('Y');
    for($i=0;$i<7;$i++){
        if ($month >= 1) {
            $result[$i] = self::getMonthDate($month,$year);
        }
        $month--;
    }
    $result = array_reverse($result);
    return $result;
}

/**
 * 获取某个月的开始日期,结束日期
 * @param string $month
 * @param string $year
 * @return array
 */
public static function getMonthDate($month = '',$year = '') {
    $month = $month ? : date('m');
    $year = $year ? : date('Y');
    $begin_date = date('Y-m-01', strtotime($year.'-'.$month));
    $end_date = date('Y-m-d', strtotime("$begin_date +1 month -1 day"));
    $out_data['month'] = (int)$month;
    $out_data['begin_date'] = $begin_date;
    $out_data['end_date'] = $end_date;
    $out_data['begin_simple'] = self::simpleDate($out_data['begin_date']);
    $out_data['end_simple'] = self::simpleDate($out_data['end_date']);
    return $out_data;
}


/**
 * 获取最近七周的日期,大于等于1
 * @param $date
 * @return array
 */
public static function getLastSevenWeek($date = '') {
    $result = [];
    $week = self::getWeeks($date);
    $year = $date ? date('Y',strtotime($date)) : date('Y');
    for($i=0;$i<7;$i++){
        if ($week >= 1) {
            $result[$i] = self::getWeekDate($week,$year);
        }
        $week--;
    }
    $result = array_reverse($result);
    return $result;
}

/**
 * 获取周的日期范围
 * @param string $week
 * @param string $year
 * @return array
 */
public static function getWeekDate($week = '',$year = '') {
    /**
     * 2007年 第一周 是 01-01 到 01 - 07 因为第一天就是星期一 6
     * 2008年 第一周 是 01-01 到 01 - 06 因为第一天就是星期二 5 (闰年多一天)
     * 2009年 第一周 是 01-01 到 01 - 04 因为第一天就是星期四 3
     * 2010年 第一周 是 01-01 到 01 - 03 因为第一天就是星期五 2
     * 2011年 第一周 是 01-01 到 01 - 02 因为第一天就是星期六 1
     * 2012年 第一周 是 01-01 到 01 - 01 因为第一天就是星期天 0
     *
     * 2019年 第一周 是 01-01 到 01 - 06 因为第一天就是星期二 5
     */
    $year = $year ? : date('Y');
    // 获取第一天
    $first_date = $year.'-01-01';
    // 获取第一天是周几
    $week_num = array(7, 1, 2, 3, 4, 5, 6);
    $first_date_week = $week_num[date('w',strtotime($first_date))];
    $first_week_end_day  =1 + (7 - $first_date_week);
    $out_data = [];
    if ($week === 1) {
        $out_data['begin_date'] = $first_date;
        $out_data['end_date']   = date('Y-m-d',strtotime('+'.($first_week_end_day - 1).' day',strtotime($first_date)));
    } else {
        $week_begin_day = $first_week_end_day + ($week - 2) * 7 + 1;
        $week_end_day = $week_begin_day + 6;
        $out_data['begin_date'] = date('Y-m-d',strtotime('+'.($week_begin_day - 1).' day',strtotime($first_date)));
        $out_data['end_date']   = date('Y-m-d',strtotime('+'.($week_end_day - 1).' day',strtotime($first_date)));
    }
    $out_data['week'] = $week;
    $out_data['begin_simple'] = self::simpleDate($out_data['begin_date']);
    $out_data['end_simple'] = self::simpleDate($out_data['end_date']);
    return $out_data;
}

/**
 * 获取日期是一年中的第几周
 * @param string $date
 * @return float
 */
public static function getWeeks($date = '') {
    /**
     * 2007年 第一周 是 01-01 到 01 - 07 因为第一天就是星期一 6
     * 2008年 第一周 是 01-01 到 01 - 06 因为第一天就是星期二 5 (闰年多一天)
     * 2009年 第一周 是 01-01 到 01 - 04 因为第一天就是星期四 3
     * 2010年 第一周 是 01-01 到 01 - 03 因为第一天就是星期五 2
     * 2011年 第一周 是 01-01 到 01 - 02 因为第一天就是星期六 1
     * 2012年 第一周 是 01-01 到 01 - 01 因为第一天就是星期天 0
     */

    $now_date = $date ? : date('Y-m-d');
    // 获取第一天
    $first_date = date('Y',strtotime($now_date)).'-01-01';
    // 获取第一天是周几
    $week_num = array(7, 1, 2, 3, 4, 5, 6);
    $first_date_week = $week_num[date('w',strtotime($first_date))];

    $diff_times = strtotime($now_date) - strtotime($first_date);
    $diff_days = MathUtil::div($diff_times , 86400,0) + 1;
    return ceil(($diff_days + $first_date_week - 1) / 7);
}
posted @ 2019-08-09 15:48  TBHacker  阅读(218)  评论(0编辑  收藏  举报