Текущая дата + 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');