2012-04-23 83 views
-2

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

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

如何,我会3个月后得到的日期....即2012-05-22

编辑: -

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

EDIT 2

随着我了解,这将是一个问题的所有响应: -

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

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

对这个问题的回答

我们需要手动检查所有的条件,准确的计算...有这个PHP中没有内置功能.... https://stackoverflow.com/a/10280441/1182021

+2

当'2012-01-31'是输入时,你期望得到什么? – 2012-04-23 06:40:23

+1

我认为你的问题没有足够明确的答案。例如,如果今天是1月31日呢?四月只有30天。 – 2012-04-23 06:41:23

+0

我们无法回答你的问题,因为我们不知道你想如何处理它。可能有一个功能可以做你想做的事,但我们不知道你想要什么。你似乎在问如何为无意义的问题找到正确的答案。你需要先决定你想要什么问题的答案。 – 2012-04-23 06:49:21

回答

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; 

只需复制和粘贴代码,请在浏览器中查看:)

+0

我可能没有正确解释这个问题....但它不是我在这里创建混乱... – 2012-04-23 12:27:17

+1

此解决方案不起作用;它在10,11或12个月不起作用,并且格式也被打破。那里还有很多不灵活的硬编码逻辑! – 2012-04-23 12:47:59

+0

它是否发生在你身上,也许有更好的方法来做到这一点......? – 2012-04-23 13:42:10

-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")); 
+2

这不是一个明智的事情。如果今天是1月31日呢? 4月份没有31天。 – 2012-04-23 06:41:56

+2

如果是十二月,会怎么样?一年中的第15个月? – 2012-04-23 06:43:21

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

您可以使用strtotime此:

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

但是,你应该知道你的问题并没有真正有一个答案,因为“月” - 在通常意义上的 - 是不是一个明确的时间单位。例如,3月31日加上三个月是多少?没有像6月31日那样的日期。

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

+0

它是否能够处理这个问题...我在我的编辑部分...我知道我没有正确解释这个问题... – 2012-04-23 06:48:00

+0

是的,它会:http://codepad.org/zt2xXW5B( 2012年是闰年) – 2012-04-23 06:54:11

+0

现在检查了这一点: - http://www.stackoverflow.com/a/10280441/1182021 – 2012-04-23 12:31:50

相关问题