-2

我如何在 php 中获得今天日期之后的 3 个月?

从 PHP 我会得到今天的日期,date("Y-m-d");让我们说2012-02-22

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

编辑:-

问题是关于不同月份的不同天数,2 月也有 28 天,闰有 29 天……奇数月 31 天,其他月份 30 天……我可以用 php 中的任何预建函数来处理这个问题问题... ??

编辑 2

有了所有的回应,我明白这将是一个问题:-

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

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

回答这个问题

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

4

4 回答 4

4

您可以strtotime为此使用:

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

但是,您应该意识到您的问题并没有真正的答案,因为“月”——在通俗意义上——并不是一个明确定义的时间单位。例如,3 月 31 日加三个月是多少?没有像 6 月 31 日这样的日期。

在上面给出的示例中,任何“额外”天数都将滚动到下个月,因此对于 3 月 31 日,您将获得 7 月 1 日。这种行为是任意的,你认为它“正确”的天气取决于你。如果您编写自己的实现,则必须自己决定如何处理这些情况。

于 2012-04-23T06:42:28.990 回答
1
$date = new DateTime();
$date->add(new DateInterval('P3M'));
于 2012-04-23T06:41:21.907 回答
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;

只需复制并粘贴代码,在您的浏览器中查看 :)

于 2012-04-23T12:21:56.633 回答
-2

PHP手册中的示例:

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

所以试试:

$lastmonth = mktime(0, 0, 0, date("m")+3,  date("d"),   date("Y"));
于 2012-04-23T06:40:14.553 回答