需要使用PHP查找未来日期

I need to find future date using php.But using php, I am unable to get correct date for February.I posted my code below.I need end date of February.Thanks in advance.

<?php
$date    =    '2011-12-31';
$dateOneMonthAdded = strtotime(date("Y-m-d", strtotime($date)) . " +2 month");
$end_date=date("Y-m-d",$dateOneMonthAdded);

echo date("Y-m-d",strtotime(date("Y-m-d", strtotime($end_date))));


?>

Try this code.

<?php
$date    =    '2011-12-31';
$dateOneMonthAdded = strtotime(date("Y-m-t", strtotime($date)) . " +2 month");
$end_date=date("Y-m-t",$dateOneMonthAdded);

echo date("Y-m-d",strtotime(date("Y-m-d", strtotime($end_date))));

?>

You can use the 1st of March and subtract 1 day:

$date = date_create('2012-03-01');
$date->modify("-1 day");
echo $date->format("Y-m-d");
$dt = new DateTime();
$dt->setDate(2011, 12, 31);
$dt->modify('last day of +2 month');
//or
$dt->modify('+2 month -2 day');
//or
$dt->modify('next month last day of next month');
print_r ($dt);

use the below code to find the first/last day of a given month,

<?php

function findFirstAndLastDay($anyDate)
{
    //$anyDate           =    '2009-08-25';    // date format should be yyyy-mm-dd
    list($yr,$mn,$dt)    =    split('-',$anyDate);    // separate year, month and date
    $timeStamp           =    mktime(0,0,0,$mn,1,$yr);    //Create time stamp of the first day from the give date.
    $firstDay            =     date('D',$timeStamp);    //get first day of the given month
    list($y,$m,$t)       =     split('-',date('Y-m-t',$timeStamp)); //Find the last date of the month and separating it
    $lastDayTimeStamp    =    mktime(0,0,0,$m,$t,$y);//create time stamp of the last date of the give month
    $lastDay             =    date('D',$lastDayTimeStamp);// Find last day of the month
    $arrDay              =    array("$firstDay","$lastDay"); // return the result in an array format.

    return $arrDay;
}

//Usage
$dayArray=array();
$dayArray=findFirstAndLastDay('2009-02-25');
print $dayArray[0];
print $dayArray[1];
?>
<?php
$date    =    '2011-12-31';
$tmp_date = strtotime(date("Y-m-1", strtotime($date)) . " +2 month");
$end_date=date("Y-m-t",$tmp_date);
echo date("Y-m-d",strtotime(date("Y-m-d", strtotime($end_date))));
?>

If you absolutely need to use strtotime, you could try with this:

<?php
$date    =    '2011-12-31';
$dateOneMonthAdded = strtotime(date("Y-m-d", strtotime($date)) . ", next month, last day of next month");
$end_date=date("Y-m-d",$dateOneMonthAdded);

echo date("Y-m-d",strtotime(date("Y-m-d", strtotime($end_date))));
?>

Which will return what you expect: 2012-02-29.

You can take a look at relative formats for strtotime in the PHP Manual as well.

If you are using PHP >= 5.2 I strongly suggest you use the new DateTime object. For example like below:

$date = '2011-12-31';
$end_date = new DateTime($date);
$end_date->modify('last day of +2 month');
echo $end_date->format('Y-m-d');

Live Demo

OR

Use strtotime()

$date    =    '2011-12-31';
$dateOneMonthAdded = strtotime(date("Y-m-d", strtotime($date)) . ", last day of +2 month");
echo $end_date = date("Y-m-d",$dateOneMonthAdded);