Текущая дата + 2 месяца

Я написал этот фрагмент кода, чтобы отобразить текущую дату + 2 месяца:

<?php
    $date = date("d/m/Y");
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months");
    $date = date("d/m/Y",$date);
    echo $date;
?>

он, похоже, не работает, поскольку он отображает : 01/03/1970.

что я делаю не так?

Спасибо за вашу помощь.

EDIT:

после прочтения комментариев и ответов я упростил и исправил его.

<?php
    $date = date("d/m/Y", strtotime(" +2 months"));
    echo $date;
?>

4 ответов


вы пропускаете второй аргумент для второго strtotime() звоните:

echo date('d/m/Y', strtotime('+2 months'));

попробуйте использовать объект DateTime:

$date = new DateTime("+2 months");
echo $date->format("d/m/Y");

Если сегодня "гггг-мм-31" , а в следующем месяце нет 31-го дня, он покажет следующий месяц этого дня, сделает результат системы "+3 месяца "вместо результата" +2 месяца".

поэтому я думаю, что это самая безопасность:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));

сначала измените дату на 1-й день.


используя DateTime - >add () или DateTime - >modify ()

Если вы работаете с существующим объектом DateTime, вы можете использовать один из них:

// Your date
$date = new DateTime(); // empty for now or pass any date string as param

// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"

// or even easier
$date->modify('+2 months');

// Checking
echo $date->format('Y-m-d');

будьте осторожны добавлять месяцев в PHP, он может переполниться на следующий месяц, если день в первоначальной даты выше, чем общее количество дней в новом месяце. Такое же переполнение происходит с високосными годами при добавлении лет. Как-то это не считается ошибкой разработчиков PHP и просто документируется без решения. Подробнее здесь: PHP DateTime:: изменить добавление и вычитание месяцев

я обнаружил, что это самое точное решение для решения проблемы переполнения:

$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');