2012-01-03 5 views
2

Мне нужно найти будущую дату, используя php. Но, используя php, я не могу получить правильную дату для февраля. Я разместил свой код ниже. Мне нужна дата окончания февраля. Спасибо заранее.Нужно найти будущую дату с помощью PHP

<?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)))); 


?> 
+1

дата окончания, как и в ** ПОСЛЕДНИЙ ДЕНЬ МЕСЯЦА **? – Jakub

+0

да последний день месяца. – Hariprabu

ответ

2

Попробуйте этот код.

<?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)))); 

?> 
4

Вы можете использовать 1 марта и вычесть 1 день:

$date = date_create('2012-03-01'); 
$date->modify("-1 day"); 
echo $date->format("Y-m-d"); 
+0

$ date = date_create ('2011-12-30'); $ date-> изменить («+ 1 месяц»); формат echo $ date-> («Y-m-d»); Выход «2012-01-30» // это правильно $ date = date_create ('2011-12-30'); $ date-> изменить («+ 2 месяца»); формат echo $ date-> («Y-m-d»); Выход «2012-03-01» // это неправильно. Мне нужен ответ вроде «2012-02-29» – Hariprabu

2
$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); 
1

использовать код, приведенный ниже, чтобы найти first/last day of a given mont ч,

<?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]; 
?> 
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)))); 
?> 
2

Если вам абсолютно необходимо использовать strtotime, вы можете попробовать:

<?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)))); 
?> 

Который вернет вам то, что вы ожидаете: 2012-02-29.

Вы также можете посмотреть relative formats для strtotime в руководстве по PHP.

0

Если вы используете PHP> = 5.2, я настоятельно рекомендую вам использовать новый объект DateTime. Например, как показано ниже:

$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

ИЛИ

Использование 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); 
Смежные вопросы