如何用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
相关产品推荐
相关产品推荐

