php从一个月中获取即将到来的日期

时间:2016-12-19 07:14:42

标签: php date datetime

在PHP中,如果我有一个月的日子:

$day = 19;

如何才能获得下次出现的$day

function nextOccurrence($day) {
    /// ???
    return $date;
}

如果今天是2016-12-18,那么nextOccurence(19)明天应该返回(19)2016-12-19

如果今天是2016-12-19或更高的12月日期,那么nextOccurence(19)应该返回下个月的19th,即2017-01-19

5 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

如果今天是< =从您想要的那天起,只需添加(今天 - 今天)天, 否则,在当天添加一个月并减去(今天 - 天)。

<?php

$day = 19;

echo nextOccurrence($day);

function nextOccurrence($day) {
    $currentDay = date('d');
    if ($day > $currentDay) {
        // Get the timestamp of $day in this month
        $date = strtotime('+' . ($day - $currentDay) . ' days');
    } else {
        // Get the timestamp of the current day in next month, and subtract the days difference
        $date = strtotime('+1 month -' . ($currentDay - $day) . ' days');
    }
    return date('Y-m-d', $date);
}

?>

答案 1 :(得分:0)

请尝试以下代码:

echo '<br>Today is :' . date('Y-m-d');
echo '<br>Next day is : ' . date('Y-m-d',strtotime("+1 day"));

...谢谢

答案 2 :(得分:0)

要操作日期,请使用DateTime对象。

  • 第1步:初始化日期
  • 步骤2:创建1天的间隔。
  • 步骤3:将此间隔添加到您的日期
  • 步骤4:将日期作为字符串返回。

即使您是2008年2月28日,它仍然有效。

<?php
//Step 1
$date = new DateTime('2008-02-29'); //or new DateTime(date('Y-m-d')) for today
//Step2
$oneDay = new DateInterval('P1D')
//Step3
$date->add($oneDay);
//Step4 will return 1 (March 1st)
echo $date->format('d') . "\n";

找到下一次出现:

$nextOccurence = new DateTime();
while ($day != $nextOccurence->format('d')){
    $nextOccurence->add($oneDay);
}

答案 3 :(得分:0)

试试这个,使用strtotime并添加1个月(如果月份是2月然后得到下个月的最后一天)并添加+1天。

function nextOccurrence($day) {  
    $date_d = date('d');    
    if ($date_d <= $day) {
        if($date_d > 28)  
        {
            $get_date = date("d-m-Y", strtotime("last day of next month")); 
        }
        else
        {
            $get_date = date("d-m-Y", strtotime("+1 month"));
        } 
    }
    else
    {
        $stop_date = date('Y-m-d H:i:s', strtotime($get_date . ' +1 day'));
    }
     echo $stop_date;
}

<强> DEMO

答案 4 :(得分:0)

请参阅以下代码:

function nextOccurrence($day) {
    $today = date("d");
    if ($today <= $day) {
        return $retDate = date("d-M-Y", strtotime(date("Y-m-d") . '+1 month'));
    } else {
        return $retDate = date("d-M-Y", strtotime(date("Y-M-$d") . "+1 day"));
    }

}
希望问题解决了。