按照 年、月、日、周、季 返回不同时间段的 起始时间与结束时间(默认按照每天返回)

/**按照 年、月、日、周、季 返回不同时间段的 起始时间与结束时间(默认按照每天返回)
 * @param $starttime  (2017-10-01)
 * @param $endtime    (2017-10-02)
 * @param string $period 时间类型
 * @return mixed
 */
public static function getEachTime($starttime, $endtime, $period = "day")
{
    $starttime = date('Y-m-d', strtotime($starttime)) . ' 00:00:00';
    $endtime = date('Y-m-d', strtotime($endtime)) . ' 23:59:59';
    $format = "";
    if ($period == 'day') {

        $format = 'Y-m-d';
    } else if ($period == 'week') {

        $format = 'Y-W';
    } else if ($period == 'month') {

        $format = 'Y-m';
    } else if ($period == 'year') {

        $format = 'Y';
    }

    $starttime = strtotime($starttime);
    $endtime = strtotime($endtime);
    $season = "";
    do {

        if ($period == "season") {
            $season = ceil((date('n', $starttime)) / 3);
            $key = date("Y", $starttime) . "-" . $season;
        } else {
            $key = date($format, $starttime);
        }


        if ($period == "week") {
            $num = date("N", $starttime);
            $list[$key]['starttime'] = date("Y-m-d H:i:s", strtotime('-' . ($num - 1) . 'day', $starttime));
            $starttime = strtotime('+' . (8 - $num) . 'day', $starttime);

        } else if ($period == "season") {

            $num = date("n", $starttime);
            $insert = str_pad(($season - 1) * 3 + 1, 2, "0", STR_PAD_LEFT);
            $list[$key]['starttime'] = date("Y-m-d H:i:s", strtotime(date("Y", $starttime) . "-" . $insert . "-01"));
            $starttime = strtotime(date("Y-m", $starttime));
            $starttime = strtotime('+' . ($season * 3 + 1 - $num) . 'month', $starttime);

        } else if ($period == "year") {

            $num = date("n", $starttime);
            $list[$key]['starttime'] = date("Y-m-d H:i:s", strtotime(date("Y", $starttime) . "-01-01"));
            $starttime = strtotime(date("Y-m", $starttime));
            $starttime = strtotime('+' . (13 - $num) . 'month', $starttime);

        } else if ($period == "month") {

            $num = date("j", $starttime);
            $list[$key]['starttime'] = date("Y-m-d H:i:s", strtotime(date("Y-m", $starttime)));
            $totalDays = date("t", $starttime);
            $starttime = strtotime('+' . ($totalDays - $num + 1) . 'day', $starttime);

        } else {
            $list[$key]['starttime'] = date("Y-m-d H:i:s", $starttime);
            $starttime = strtotime('+1 ' . $period, $starttime);
        }

        $list[$key]['endtime'] = date("Y-m-d H:i:s", $starttime - 1);


    } while ($starttime < $endtime);


    if ($period == "season") {
        $season = ceil((date('n', $endtime)) / 3);
        $key = date("Y", $endtime) . "-" . $season;
    } else {
        $key = date($format, $endtime);
    }

    if (!isset($list[$key])) {
        $list[$key]['starttime'] = date("Y-m-d H:i:s", strtotime(date("Y-m-d", $endtime)));
        $list[$key]['endtime'] = date("Y-m-d H:i:s", $endtime);
    }
    return $list;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值