You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 如何根据指定月份的周数获取对应日期范围

Laravel 实现指定年月周次返回对应日期列表方案

Laravel 内置 Carbon 日期处理库,无需额外安装扩展即可完成需求,实现逻辑如下:

核心功能代码

use Carbon\Carbon;

/**
 * 根据传入的年、月、周次返回对应周的全部日期
 * @param int $year 年份
 * @param int $month 月份
 * @param int $weekNumber 当月周次
 * @return array
 */
function getWeekDates(int $year, int $month, int $weekNumber): array
{
    // 获取当月第一天
    $firstDayOfMonth = Carbon::create($year, $month, 1);
    // 配置周起始为周日、周结束为周六,和示例输出规则匹配
    $firstWeekStart = $firstDayOfMonth->copy()->startOfWeek(Carbon::SUNDAY);
    
    // 适配常用计数规则:当月第一周为包含当月日期的第一个完整周
    if ($firstWeekStart->month !== $month) {
        $firstWeekStart->addWeek();
    }

    // 计算目标周的起止日期
    $targetWeekStart = $firstWeekStart->copy()->addWeeks($weekNumber - 1);
    $targetWeekEnd = $targetWeekStart->copy()->endOfWeek(Carbon::SATURDAY);

    // 生成日期列表
    $dates = [];
    for ($currentDate = $targetWeekStart->copy(); $currentDate->lte($targetWeekEnd); $currentDate->addDay()) {
        // 直接返回Y-m-d格式日期,如需中文格式可替换为 $currentDate->format('Y年m月d日')
        $dates[] = $currentDate->toDateString();

        // 如需仅保留当月日期,可打开下方注释
        // if ($currentDate->month === $month) {
        //     $dates[] = $currentDate->toDateString();
        // }
    }

    return $dates;
}

注意:如果你所在地区的周起始规则为周一,只需要将代码中的startOfWeek(Carbon::SUNDAY)修改为startOfWeek(Carbon::MONDAY),endOfWeek(Carbon::SATURDAY)修改为endOfWeek(Carbon::SUNDAY)即可。

调用示例

传入示例参数即可得到对应结果:

$weekDates = getWeekDates(2021, 10, 2);
// 输出结果:["2021-10-10","2021-10-11","2021-10-12","2021-10-13","2021-10-14","2021-10-15","2021-10-16"]

自然语言输入解析

如果需要直接解析「2021年10月第2周」这类字符串格式的输入,可以增加以下正则提取逻辑:

function parseWeekText(string $input): ?array
{
    if (preg_match('/(\d{4})年(\d{1,2})月第(\d{1,2})周/', $input, $matches)) {
        return [
            'year' => (int)$matches[1],
            'month' => (int)$matches[2],
            'week' => (int)$matches[3],
        ];
    }
    return null;
}

// 调用示例
$params = parseWeekText('2021年10月第2周');
if ($params) {
    $weekDates = getWeekDates($params['year'], $params['month'], $params['week']);
}

内容的提问来源于stack exchange,提问作者Zacharias Hendrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:39:00