Я занимаюсь изучением PHP, и у меня проблемы. Моя функция возвращает "вехи" с той же датой, в которую они были подключены. Я считаю, что неправильно использую метод add(). Спасибо.
PHPplayground: http://www.tehplayground.com/#cARB1wjth
$milestones = null;
$milestones = createMilestone($milestones, true, 10, "15-1-1", "birthday" );
var_dump( $milestones );
function createMilestone($milestones, $forward, $days, $startDate, $milestoneName ){
if ( is_string($startDate)){
$date = DateTime::createFromFormat("Y-m-d", $startDate );
}else if(is_array($startDate) ){
$date = $startDate["date"];
}else{
$date = $startDate;
};
$daysInterval = DateInterval::createFromDateString($days);
if ($forward){
$date->add($daysInterval);
}else{
$date->sub($daysInterval);
}
$milestones[$milestoneName]['date'] = $date;
return $milestones;
}
Вам необходимо использовать:
$daysInterval = DateInterval::createFromDateString($days . ' days');
Смотрите документ здесь для DateInterval и эту страницу для разнообразного форматирования даты ( так называемый относительный формат), вы можете использовать.
И BTW, если вы даете DateTime как "15-1-1"
, правильный формат не "Ymd"
а "ymd
" (нижний регистр " y
")
$milestones
в качестве аргумента вашей функции.