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

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

场景

中文描述

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

代码示例

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

 //计算周
    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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值