2016-02-11 3 views
1
.

. У меня есть класс календаря. Где я ввожу год только от пользователя и генерировать целые дни года и сохранять в базе данных.Ошибка: вызов в функцию функции-члена() для не-объекта. Создание каждого дня года.

class Calendar 
{ 
    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="today_date", type="datetime", nullable=true) 
    */ 
    protected $todayDate; 
    /** 
    * @var boolean $isBusinessDay 
    * @ORM\Column(name="is_business_day", type="boolean", nullable=true) 
    */ 
    protected $isBusinessDay; 
    /** 
    * @var boolean $isHoliday 
    * @ORM\Column(name="is_holiday", type="boolean", nullable=true) 
    */ 
    protected $isHoliday; 
    /** 
    * @var time $openTime 
    * 
    * @ORM\Column(name="open_time", type="time", nullable=true) 
    */ 
    protected $openTime; 
    /** 
    * @var time $openTime 
    * 
    * @ORM\Column(name="close_time", type="time", nullable=true) 
    */ 
    protected $closeTime; 

} 

if ($form->isSubmitted() && $form->isValid()) { 
    $weekday = $form["weekday"]->getData(); 
    $start_date = $form["todayDate"]->getData(); 
    $start_date = (string) $start_date->format('Y-m-d'); 
    $start_day = date('z', strtotime($start_date)); 
    $days_in_a_year = date('z', strtotime('2016-12-31')); 
    $number_of_days = ($days_in_a_year - $start_day) +1 ; 
    for ($i = 0; $i < $number_of_days; $i++) { 
     $date = strtotime(date("Y-m-d", strtotime($start_date)) . " +$i day"); 
     print date('d F - l', $date) .'<br />'; 
     if (in_array(date('l', $date), $weekday)) 
     { 
     print "Match found".'<br />'; 
     $date_temp2 = date('Y-m-d',$date); 
     print $date_temp2.'<br />'; 
     $date_temp = new \DateTime($date_temp2); 
     $TodayDate = $date_temp->format('Y-m-d'); 
     $calendar2 = new Calendar(); 
     $calendar2->setTodayDate($TodayDate); 
     $calendar2->setOpenTime($form["openTime"]->getData()); 
     $calendar2->setCloseTime($form["closeTime"]->getData()); 
     $calendar2->setIsBusinessDay(true); 
     $calendar2->setIsHoliday(false); 
     $em->persist($calendar2); 
     } 
     else 
     { 
     print "Match not found".'<br />'; 
     $calendar2 = new Calendar(); 
     $calendar2->setIsBusinessDay(false); 
     $calendar2->setIsHoliday(true); 
     $em->persist($calendar2); 
     } 
     } 
    $em->flush(); 
    } 

На самом деле я хочу получить Год только от пользователя. Получите первый день года и сохраните в базе данных, добавив один дополнительный день. В случае блокировки он печатает дату всего года. в

30 December - Friday 
Match found 
2016-12-30 
31 December - Saturday 
Match not found 

И В конце-го я получаю эту ошибку

Error: Call to a member function format() on a non-object

+0

вместо этой строки: - $ date_temp = new \ DateTime ($ date_temp2); $ TodayDate = $ date_temp-> format ('Ym-d'); 'написать одну строку: -' $ TodayDate = date (' Ym-d ', strtotime ($ date_temp2)); ' –

+0

, в какой строке вы получили эту ошибку? можете ли вы отметить это по коду? – SarangaR

+0

@SarangaR Вот почему я не могу отлаживать, потому что он печатает все даты, которые я печатаю в блоке. Но в конце возникает ошибка. –

ответ

0

$start_date исходя из $form['todayDate'], безусловно null.

Добавить проверку, чтобы предотвратить эту ошибку.

Изменение:

$start_date = $form['todayDate']; 

To:

$start_date = $form['todayDate'] ?: new \DateTime(); 

Как это, вы получите текущую дату в качестве DateTime объекта и может использовать format('Y-m-d').