2013-01-19 74 views
1

下面的代碼給了我X個從今天的日期和回來的月份,但是我想從2012年11月1日開始計算X個月的日期並返回。如何才能做到這一點?從上一個日期開始計算X個月

// $nrOfMonths can be 1, 3 and 6 

function GetIncidents(nrOfMonths) { 

    $stopDate = strtotime('-' . $nrOfMonths .' months'); 

    ... rest of the code ... 
} 
+0

[相對語句總是在非相對語句後處理。這使得「2008年7月+1周」和「2008年7月+1周」相當。](http://php.net/manual/en/datetime.formats.relative.php)因此,使用「2012年11月1日 - $ nrofmonths幾個月「 – Gordon

回答

4

你可以這樣做:

$stopDate = strtotime('1st November 2012 -' . $nrOfMonths .' months'); 

雖然,我更喜歡這樣的語法:

$stopDate = strtotime("1st November 2012 - {$nrOfMonths} months"); 

因此,您的代碼應遵循此模式:

function GetIncidents(nrOfMonths) { 

    //your preferred syntax! 

    //the rest of your code 

} 
+0

您也可以將第二個參數傳遞給'strtotime'來表示相對日期的基準時間戳。雖然'DateTime'方法似乎更合適。 –

+0

函數GetIncidents(nrOfMonths,dateX =「2012年11月1日」){ $ stopDate = strtotime($ dateX' - '。$ nrOfMonths。'months'); ...其餘代碼... }看起來更好 – dmi3y

2

使用DateTimeDateInterval類來實現這一點。

$date = new DateTime('November 1, 2012'); 
$interval = new DateInterval('P1M'); // A month 

for($i = 1; $i <= $nrOfMonths; $i++) { 
    $date->sub($interval); // Subtract 1 month from the date object 
    echo $i . " month(s) prior to November 1, 2012 was " . $date->format('F j, Y'); 
} 
相關問題