Вот мой код:
$graceperiod = strtotime("+30 day","23-12-2013");
echo $graceperiod;
Я получаю следующий вывод:
Sat, 31 Jan 1970 00:00:23 GMT
Год не тот. Любая идея, почему он не конвертирует должным образом?
strtotime — «опасная» функция, если вы не знаете, что именно она делает.
Вы должны попробовать это так
strtotime('+30 days', $timestamp);
Где $ timestamp — это фактическая временная метка, потому что она не так надежна, как вы могли бы пожелать
strtotime
принимает метку времени Unix в качестве второго параметра, поэтому вам нужно сначала преобразовать ее.
Следующее имеет правильный вывод:
$graceperiod = date("Y-m-d", strtotime("+30 days",strtotime("23-12-2013")));
echo $graceperiod;
Вы можете использовать старый добрый strtotime()
функция (которая принимает метку времени в качестве второго параметра) или использовать DateTime
классы:
С помощью strtotime()
$format = 'd-m-Y';
$timestamp = strtotime( "+30 day",strtotime( "23-12-2013" ) );
echo date( $format, $timestamp );
С помощью DateTime
классы:
$dateTime = DateTime::createFromFormat( $format, '23-12-2013' );
$dateTime->add( new DateInterval( 'P30D' ) );
echo $dateTime->format( $format );
Здесь P30D
означает период в 30 дней
Одно из преимуществ использования DateTime
это вы можете определить ваш собственный формат вместо того, чтобы использовать из список принятых форматов за strtotime()
менять
$graceperiod = strtotime("+30 day","23-12-2013");
в
$graceperiod = strtotime("+30 days","23-12-2013");
30 days
правильно вместо 30 day
strtotime
принимает второй параметр как метку времени, поэтому вы должны сделать:
$graceperiod = strtotime("+30 day", strtotime("23-12-2013"));
echo date("Y-m-d H:i:s", $graceperiod);
Попробуйте следующий код.
$date = "23-12-2013";
$graceperiod = date("Y-m-d", strtotime("+30 days",strtotime($date)));
echo $graceperiod;
strtotime("next month");
или же
date('Y-m-d', strtotime("+30 days"));
Код:
$graceperiod = strtotime('23-12-2013 +30 day');
var_dump(date('Y-m-d', $graceperiod));
Результат:
string(10) "2014-01-22"