PHP根据指定月份和日期获取大于当前时间含年份的完整时间

光看标题,有些小伙伴是不是感觉比较绕,所以才要记录下来,欢迎交流!

先看举例

先举例两个来说明

1、指定月日是【12月20日】,那么大于当前时间的下一个【12月20日】就是【2025年12月20日】

2、指定月日是【12月24日】,那么大于当前时间的下一个【12月24日】就是【2024年12月24日】

代码示例

为了获取指定月份和日期大于当前时间的包含年份的完整时间,可以使用PHP中的 DateTime 类来处理日期和时间,我们据此写个函数,接受月份和日期作为参数,然后返回一个DateTime对象,表示下一次出现该月该日的时间。

<?php
/**
 * 获取下一次执行清零的日期 - 根据【月日】
 * 
 * @param $month 月
 * @param $day 日
 */
function getNextTimeByMonthDay( $month = 0, $day = 0 ){
	if( empty($month) || empty($day) ){
		return error(-1, '参数错误');
	}

	// 获取当前时间
	$now = new DateTime();

	// 创建目标日期时间对象
	$targetDate = DateTime::createFromFormat('Y-m-d', sprintf('%d-%02d-%02d', $now->format('Y'), $month, $day));

	// 如果目标日期在过去或今天,则将年份加1
	if( $targetDate <= $now ){
		$targetDate->modify('+1 year');
	}

	return $targetDate;
}

使用示例

$month = 12; // 12月
$day = 20;  // 20日

$nextTime = getNextTimeByMonthDay($month, $day);

echo "下一个 {$month}月{$day}日 的时间是: " . $nextTime->format('Y-m-d H:i:s') . "\n";

打印结果是:2025-12-20 11:54:10