Дата плюс один месяц php [дубликат]

этот вопрос уже есть ответ здесь:

У меня небольшая проблема с датами в PHP.

когда я сделал 31 + 1 месяц январь с помощью этого кода

$newDate = date('Y-m-d', strtotime('31-01-2016'.' + 1 month'));
echo $newDate;

это дает мне 2 марта, но мне нужно дать мне 29 февраля

Мне нужно добавить 1 месяц, а не 30 дней.

то же самое для всех дат: например 01 января + 1 месяц => 1 февраля

29 января + 1 месяц => 29 февраля

30 января + 1 месяц => 29 февраля

31 января + 1 месяц => 29 февраля

Спасибо за помощь

4 ответов


Я думаю, что вы ищете этот тип дат.

<?php
    $date = date('2016-01-31');
    $currentMonth = date("m",strtotime($date));
    $nextMonth = date("m",strtotime($date."+1 month"));
    if($currentMonth==$nextMonth-1){
        $nextDate = date('Y-m-d',strtotime($date." +1 month"));
    }else{
        $nextDate = date('Y-m-d', strtotime("last day of next month",strtotime($date)));
    }
    echo "Next date would be : $nextDate";
?>

Проверьте live demo:https://eval.in/610034

  1. если дата 31-01-2016 тогда следующая дата будет 29-02-2016
  2. если дата 25-01-2016 тогда следующая дата будет 25-02-2016

просто:

$date = new DateTime('2016-01-31');
$date->modify('last day of next month');

это, конечно, считается, только если вы всегда идете от конца одного мотылька до конца следующего.


попробуйте это,

$date = "2016-01-29";
$date = date('Y-m-d', strtotime("last day of next month",strtotime($date)));
echo $date;

https://3v4l.org/Y9PpV


Как насчет чего-то вроде этого:

date_default_timezone_set('UTC');

$current_month = (int) date('m');
$year = date('y');
$newDate = date('Y-m-d', strtotime('31-1-2016'.' + 1 month'));

if($current_month == 12) 
{
    $new_month=0;
    $year++;
}

$d = new DateTime( $year.'-'.($current_month+1).'-01' ); 
echo $d->format( 'Y-m-t' )."\n";

изменить $current_month / долл. ежегодно, исходя из ваших потребностей......