Мне нужно получить разницу двух дат и обновить разницу дат в базе данных.
модель
public function approve($id, $leave_type, $leave_start, $leave_end)
{
$diffDays= abs($leave_end - $leave_start);
$this->db->set('leave_days', $diffDays);
$this->db->set('status', Approved);
$this->db->where('id', $id);
$this->db->update('leave');
return $this->db->affected_rows() > 0;
}
abs ($ leave_end - $ leave_start); не работает. Но когда жестко задано значение diffDays, он работает нормально.






$ leave_start = '01 -01-2018 '; $ leave_end = '10-01-2018 ';
$id = 1;
$diffDays = abs($leave_end - $leave_start);
$this->db->set('leave_days', $diffDays);
$this->db->where('id', $id);
$this->db->update('leave');
убедитесь, что ваш $ diffDays имеет некоторую ценность, потому что он сработал для меня.
Please try this for getting a difference between two dates.
$date1=date_create($leave_start);
$date2=date_create($leave_end);
$diff=date_diff($date1,$date2);
$days=$diff->format("%a");
$id = 1;
$this->db->set('leave_days', $days);
$this->db->where('id', $id);
$this->db->update('leave');
какие? дней не достал.
Пожалуйста, опишите подробнее свою проблему.
В моем коде выше статус установлен правильно, но diffDays не установлен. Я обновил свой код выше. Когда я даю определенное число для diffDays, это работает. Но здесь 'abs ($ leave_end - $ leave_start); ' не работает.
у вас есть только разница в дате обновления в БД, так почему вы используете эту функцию abs () в своем коде.
Есть ли другая альтернатива, чтобы получить разницу дат, кроме функции abs ()
в моем ответе есть решение вашей проблемы. попробуйте
Я тоже пробовал это. Но база данных по-прежнему не обновляется.
ВСТАВИТЬ В leave (id, user_name, user_id, leave_type, leave_start, leave_end, leave_days, status) ЗНАЧЕНИЯ (121, 'Гарри Поттер', 6, 'Случайный', '2018-06-28', '2018-06-29' , 0, «Одобрено»), (122, «Гарри Поттер», 6, «Годовой», «2018-06-22», «2018-06-25», 0, «Утверждено»), (123, «Гарри Potter ', 6,' Casual ',' 2018-06-23 ',' 2018-06-25 ', 4,' Approved ');
извините, но это не ваша структура таблицы, и для получения структуры таблицы выполните этот запрос в своем phpmyadmin. desc leave;
СОЗДАТЬ ТАБЛИЦУ leave (id int (11) NOT NULL, user_name text NOT NULL, user_id int (11) NOT NULL, leave_type varchar (255) NOT NULL, leave_start date NOT NULL, leave_end date NOT NULL, leave_days int (11) NOT NULL , status текст НЕ ПУСТОЙ) ENGINE = InnoDB DEFAULT CHARSET = latin1;
попробуйте это $ this-> db-> set ('leave_days', (int) $ days);
Отрегулируйте формат даты в соответствии с используемым форматом.
$leave_start = DateTime::createFromFormat('Y-m-d', $leave_start);
$leave_end = DateTime::createFromFormat('Y-m-d', $leave_end);
$diffDays = $leave_end->diff($leave_start)->format("%a");
$this->db->where('id', $id);
$this->db->update('leave', array('leave_days' => $diffDays));
Вы напечатали свою переменную "$ diffDays", я думаю, что у нее пустое значение?