Codeigniter Получить разницу двух дат

Мне нужно получить разницу двух дат и обновить разницу дат в базе данных.

модель

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, он работает нормально.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
2 596
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

$ 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 имеет некоторую ценность, потому что он сработал для меня.

Вы напечатали свою переменную "$ diffDays", я думаю, что у нее пустое значение?

aditya 21.08.2018 13:56
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');

какие? дней не достал.

shubham chhapre 24.08.2018 12:53

Пожалуйста, опишите подробнее свою проблему.

shubham chhapre 24.08.2018 12:56

В моем коде выше статус установлен правильно, но diffDays не установлен. Я обновил свой код выше. Когда я даю определенное число для diffDays, это работает. Но здесь 'abs ($ leave_end - $ leave_start); ' не работает.

shavindip 24.08.2018 13:05

у вас есть только разница в дате обновления в БД, так почему вы используете эту функцию abs () в своем коде.

shubham chhapre 24.08.2018 13:17

Есть ли другая альтернатива, чтобы получить разницу дат, кроме функции abs ()

shavindip 24.08.2018 13:22

в моем ответе есть решение вашей проблемы. попробуйте

shubham chhapre 24.08.2018 13:23

Я тоже пробовал это. Но база данных по-прежнему не обновляется.

shavindip 24.08.2018 13:24

ВСТАВИТЬ В 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 ');

shavindip 24.08.2018 13:28

извините, но это не ваша структура таблицы, и для получения структуры таблицы выполните этот запрос в своем phpmyadmin. desc leave;

shubham chhapre 24.08.2018 13:30

СОЗДАТЬ ТАБЛИЦУ 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;

shavindip 24.08.2018 13:32

попробуйте это $ this-> db-> set ('leave_days', (int) $ days);

shubham chhapre 24.08.2018 13:40
Ответ принят как подходящий

Отрегулируйте формат даты в соответствии с используемым форматом.

    $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));

Другие вопросы по теме