2012-04-23 84 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

相關問題