当我只给它日期和月份时,我希望能够找到它的下一次出现。我找到了有关如何查找“下周一”或如何使用另一种语言的答案,但是我不知道如何使用PHP!
例如,如果我给出函数的日期为2019-07-04(Ymd),则在2019-07-03上,返回的日期仍为2019-07-04,但在2019-07-04上,下一次出现是2020-07-04。
所以,如果我给它指定7月3日的日期,我想知道该日期下次出现吗?如果是明天或364天,那么接下来是什么时候?
答案 0 :(得分:2)
您可以只检查日期是否比今天多,并保留它,或者增加一年。
function nextDate($day, $month){
$dateObj = DateTime::createFromFormat('m-d', $month.'-'.$day);
$today = new \DateTime();
if($dateObj > $today){
return $dateObj;
}
return $dateObj->modify('+ 1 year');
}
答案 1 :(得分:0)
老实说,我无法为relative format编写一个有效的strtotime(),这将是我们大家梦dream以求的优雅单线,所以我组成了一个穷人循环:< / p>
/**
* @param int $month
* @param int $day
* @param int $reference Unix time, defaults to today
* @return int Unix time
*/
function nextOcurrence($month, $day, $reference = null)
{
if ($reference === null) {
$reference = mktime(0, 0, 0);
}
$year = date('Y', $reference);
while (!checkdate($month, $day, $year) || ($date = mktime(0, 0, 0, $month, $day, $year)) <= $reference){
$year++;
}
return $date;
}
要点:
Demo。