如何获得3个月后的日期?

时间:2012-04-23 06:37:54

标签: php date

如何在今天的PHP发布后3个月内获得?

从PHP我今天的日期date("Y-m-d");可以说2012-02-22

我将如何在3个月后获得约会......即2012-05-22

修改: -

问题是关于不同月份的不同天数,feb有28天也有29天跳跃...奇数月31和其他30 ...是否有任何预先构建的功能在PHP我可以使用处理这个问题...... ??

编辑2

通过所有回复,我明白这将是一个问题: -

参考https://stackoverflow.com/a/10275921/1182021 [+1]

所以我认为为它编写一个手动功能会更好......我会把它作为答案...感谢大家的帮助和支持..

对此问题的回答

我们需要手动检查所有条件以进行准确的计算......在PHP中没有内置函数.... https://stackoverflow.com/a/10280441/1182021

4 个答案:

答案 0 :(得分:4)

您可以使用strtotime

$time = strtotime('+3 months');

然而,你应该意识到你的问题并没有真正的答案,因为从口语意义上来说,“月份”并不是一个明确定义的时间单位。例如,3月31日加三个月是什么时候?没有6月31日这样的日期。

在上面给出的示例中,任何“额外”日期都将延续到下个月,因此在3月31日you'll get the 1st of July。这种行为是任意的,你认为它“正确”的天气取决于你。如果您编写自己的实现,则必须自己决定如何处理这些情况。

答案 1 :(得分:1)

$date = new DateTime();
$date->add(new DateInterval('P3M'));

答案 2 :(得分:0)

这是完成任务的100%工作代码

<?php
$month = date('n');
$year = date('Y');
$IsLeapYear = date('L');
$NextYear = $year + 1;
$IsNextYearLeap = date('L', mktime(0, 0, 0, 1, 1, $NextYear));
$TodaysDate = date('j');
if (strlen($month+3) < 10)
{
    $UpdateMonth = "0".($month+3);
}
if ($month > 9) {
    if ($month == 10)
    {
        $UpdateMonth = "01";
    }
    else if ($month == 11)
    {
        $UpdateMonth = "02";
    }
    else
    {
        $UpdateMonth = "03";
    }
}

if (($month != 10) && ($month != 11) && ($month != 12))
{
    if(($month&1) && ($TodaysDate != 31))
    {
        $DateAfterThreeMonths = $year."-".$UpdateMonth."-".$TodaysDate;
    }
    else if (($month&1) && ($TodaysDate == 31))
    {
        $DateAfterThreeMonths = $year."-".$UpdateMonth."-30";
    } 
    else {
        $DateAfterThreeMonths = $year."-".$UpdateMonth."-".$TodaysDate;
    }
}
else if ($month == 11)
{
    if (($TodaysDate == 28) || ($TodaysDate == 29) || ($TodaysDate == 30))
    {
        if ($IsLeapYear == 1)
        {
            $DateAfterThreeMonths = ($year+1)."-".$UpdateMonth."-28";
        }
        else if ($IsNextYearLeap == 1)
        {
            $DateAfterThreeMonths = ($year+1)."-".$UpdateMonth."-29";
        }
        else
        {
            $DateAfterThreeMonths = ($year+1)."-".$UpdateMonth."-28";
        }
    }
    else
    {
        $DateAfterThreeMonths = ($year+1)."-".$UpdateMonth."-".$TodaysDate;
    }
}
else
{
    $DateAfterThreeMonths = ($year+1)."-".$UpdateMonth."-".$TodaysDate;
}
echo $DateAfterThreeMonths; 
?>

我们可以通过在顶部使用这段代码来手动检查内容: -

// Just change the values of $month, $year, $TodaysDate
$month = 11;
$year = 2012;
$IsLeapYear = date('L');
$NextYear = $year + 1;
$IsNextYearLeap = date('L', mktime(0, 0, 0, 1, 1, $NextYear));
$TodaysDate = 31;

只需复制并粘贴代码,然后在浏览器中进行检查:)

答案 3 :(得分:-2)

来自the PHP manuals的示例:

$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));

所以试试:

$lastmonth = mktime(0, 0, 0, date("m")+3,  date("d"),   date("Y"));