找不到与今天动态相关的 return 周日期数组的函数

Cannot find function which return array of weekly date relative from today dynamically

正如标题所说,我一直在谷歌搜索但没有任何线索。

事情是这样的,假设我有一个采用整数参数的函数。当我调用它时,即 scoutWeekly(1),它会列出本月的第一周(1 月 28 日至 2 月 3 日)。如果我给函数的参数 2,它会列出本月的第二周(2 月 4 日至 2 月 10 日)。等等...这一切都应该与这一天有关,例如,如果它被调用scoutWeekly(1),它会跳转到 (28 Jan-03 Feb)

你们有什么线索或片段吗?

function weeks($month, $year)
{
    $num_of_days = date("t", mktime(0, 0, 0, $month, 1, $year));
    $lastday     = date("t", mktime(0, 0, 0, $month, 1, $year));
    $no_of_weeks = 0;
    $count_weeks = 0;
    while ($no_of_weeks < $lastday)
    {
        $no_of_weeks += 7;
        $count_weeks++;
    }
    return $count_weeks;
}

function getRangeByWeek($weekNo)
{
    $firstDayOfCurrentMonth = date('Y-m-01');
    $globalWeek             = intval(date('W', strtotime($firstDayOfCurrentMonth)));
    $globalYear             = intval(date('Y', strtotime($firstDayOfCurrentMonth)));
    $globalMonth            = intval(date('m', strtotime($firstDayOfCurrentMonth)));
    $totalNumberOfWeeks     = weeks($globalMonth, $globalYear);
    $date                   = new DateTime();
    $result                 = [];
    for ($i = 1; $i <= $totalNumberOfWeeks; $i++)
    {
        $startDate  = $date->setISODate($globalYear, $globalWeek)->format("d M");
        $endDate    = $date->setISODate($globalYear, $globalWeek, 7)->format("d M");
        $result[$i] = $startDate . '-' . $endDate;
        $globalWeek++;
    }
    return $result[$weekNo];
}
echo getRangeByWeek(1);
  1. 从当月的第一天和所需的年份和月份提取全球周
  2. 当月总周数
  3. 创建了空的 DateTime 实例以执行简单计算并获取全局周的第一个日期
  4. 将全局周数增加到当月的总周数
  5. 无论生成什么结果,我都将索引保留为当月的周数
  6. 返回当月当前周数的日期范围

输出

28 Jan-03 Feb

Demo

有一个更简单的方法...

function scoutWeekly($n) {
    // today's date
    $today = new DateTime();
    // set to first day of the month
    $today->setDate($today->format('Y'), $today->format('m'), 1);
    // get the Monday earlier
    $today->sub(new DateInterval('P' . ($today->format('N') - 1) . 'D'));
    // add the required number of weeks
    if ($n > 1) {
        $today->add(new DateInterval('P' . ($n - 1) . 'W'));
    }
    // and format the result
    return $today->format('d M') . '-' . $today->add(new DateInterval('P6D'))->format('d M');
}
echo scoutWeekly(1)

输出:

28 Jan-03 Feb

Demo on 3v4l.org

我是主播

这是已解决的答案:

    private static function addScoutWeek(int $addNumb = null) : array
    {
        $addStart = Carbon::now()->startOfMonth()->addWeek($addNumb)->startOfWeek();
        $interval = new \DateInterval('P1D');
        $addEnd = Carbon::now()->startOfMonth()->addWeek($addNumb)->endOfWeek();
        $dateRange = new \DatePeriod($addStart, $interval, $addEnd);

        foreach ($dateRange as $date) {
            $arrOfDate[] = $date;
        }

        return $arrOfDate;
    }

结案