2014-09-14 1 views
1

Я пытаюсь перечислить время, оставшееся на аукционе. Ниже приведен запрос SQL для сбора данных элемента. В базе данных есть время создания и окончания, которое хранится как дата-время. В конце foreach я получаю текущее время от системы.Вычитание системного времени php из элемента datetime SQL

Что я хочу, это разница между ними, так что я могу отображать оставшееся время на аукционе. Я пробовал несколько способов, но, похоже, не могу его решить. Как мне это сделать?

$query = $this->db->query("SELECT * FROM tbl_auction_listing WHERE list_pk = $item LIMIT 1;"); 
      foreach ($query->result() as $row) 
      { 
       $sellerid = $row->seller_fk; 

       $title = $row->title; 

       $description = $row->description; 

       $img_url = $row->image_url; 
       $category = $row->category_fk; 
       $starttime = $row->start_datetime; 
       $endtime = $row->end_datetime; 
       $startprice = $row->start_price; 
       $reserve = $row->reserve_price; 
       $buyprice = $row->bin_price; 
       $visits = $row->visits; 
       $now = date("Y-m-d H:i:s"); 

      } 

Примечание:

$remaining = $endtime->diff($now)->format("%m months, %d days, %H hours and %i minutes"); 

эта линия не похоже на работу. Она ошибка:

Fatal error: Call to a member function diff() on a non-object in controllers/listings.php on line 28

+0

http://stackoverflow.com/a/20556191/ - если это не то, что вы ищете, покажите нам, что вы пробовали. Есть много способов сделать это. –

+0

Я просто добавил редактирование, которое показывает, что я пробовал, спасибо. – user3175451

+0

Попробуйте 'timediff' вместо' diff' - может быть причина. Это и/или не-объект; возможно, сбойный запрос. –

ответ

0

им не PHP эксперта, но по документации есть datetime diff и datetime sub.

в общем случае, если невозможно вычислить напрямую, я склонен конвертировать в unixtime секунды, рассчитывать и конвертировать обратно в дату и время.

0

Вам нужно создать объекты DateTime в PHP из результатов вашего запроса.

$now  = new DateTime(); 
$endtime = new DateTime($row->end_datetime); 
$difference = $endtime->diff($now); 
$remaining = $difference->format("%m months, %d days, %H hours and %i minutes"); 

Кроме того, вы не можете цеплять методы в PHP, как на других языках, таких как JavaScript.

+0

В настоящее время я использую ТОЧНО, как вы писали: '$ now = new DateTime(); \t \t \t \t $ endtime = new DateTime ($ row-> end_datetime); \t \t \t \t $ разница = $ endtime-> diff ($ now); \t \t \t \t $ Остальные = $ difference-> format ("% m месяцев,% d дней,% часов H и% i минут"); \t \t} 'но я все еще получаю ошибку' Fatal error: вызов неопределенного метода DateTime :: diff() в /home/content/61/11420661/html/btcbidder.com/application/controllers/listings.php в строке 29'. Вы можете увидеть этот пример в [http://btcbidder.com/listings/view/14 – user3175451

+0

В случае, если это ошибка PHP-версии, я добавил запрос на обновление с помощью моего хоста. Я работал 5.3, и этот метод должен был быть доступен. Я модернизируюсь до 5.4, так что, надеюсь, ничто не сломается на моих других сайтах в процессе. – user3175451

+0

Обновлен до 5.4 и по-прежнему остается той же ошибкой, используя код, который вы указали. – user3175451

Смежные вопросы