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

如何用PHP判断指定日期之后下一个周一或周四的日期?

PHP 判断起始日期后最近的周一或周四并获取日期格式

当然可以实现,用PHP的DateTime类就能轻松处理这类日期计算需求。以下是两种常见场景的实现代码:

场景1:包含起始日期当天(若当天是周一/周四则直接返回)

function getNextMondayOrThursday(string $startDate): string {
    $date = new DateTime($startDate);
    $currentDay = (int)$date->format('N'); // 1=周一,2=周二...7=周日

    // 判断最近的目标日期
    if ($currentDay === 1) {
        // 当天是周一,直接返回
        return $date->format('Y-m-d');
    } elseif ($currentDay <= 4) {
        // 周二到周四,最近的是周四
        $date->modify('next thursday');
    } else {
        // 周五到周日,最近的是下周一
        $date->modify('next monday');
    }

    return $date->format('Y-m-d');
}

// 示例调用
echo getNextMondayOrThursday('2024-05-22'); // 假设当天是周三,返回2024-05-23(周四)
echo getNextMondayOrThursday('2024-05-24'); // 当天是周五,返回2024-05-27(周一)
echo getNextMondayOrThursday('2024-05-20'); // 当天是周一,返回2024-05-20

场景2:仅返回起始日期之后的周一/周四(不包含当天)

如果需求是必须找起始日期之后的日期(哪怕当天是周一/周四也跳过),只需调整逻辑:

function getNextMondayOrThursdayAfter(string $startDate): string {
    $date = new DateTime($startDate);
    $currentDay = (int)$date->format('N');

    if ($currentDay < 4) {
        // 周一到周三,下一个周四在之后
        $date->modify('next thursday');
    } elseif ($currentDay === 4) {
        // 当天是周四,找下周一
        $date->modify('next monday');
    } else {
        // 周五到周日,找下周一
        $date->modify('next monday');
    }

    return $date->format('Y-m-d');
}

// 示例调用
echo getNextMondayOrThursdayAfter('2024-05-20'); // 当天是周一,返回2024-05-23(周四)
echo getNextMondayOrThursdayAfter('2024-05-23'); // 当天是周四,返回2024-05-27(周一)

代码说明

  • DateTime类是PHP处理日期的核心工具,支持灵活的日期修改和格式化;
  • format('N')返回ISO-8601格式的星期数(1=周一,7=周日),便于数值判断;
  • modify('next thursday')和modify('next monday')是PHP的相对日期语法,会自动计算出对应最近的目标日期。

内容的提问来源于stack exchange,提问作者Ron Piggott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:50:45