2016-08-17 2 views
2

Простите, это длинный. Я хочу дать все основания для этого вопроса.

Я использую DataTables серверную обработку для проекта. Моя цель - использовать функцию echo для echo количество дней между сегодняшней датой и датами в столбце моей базы данных под названием CreatedDate, который является типом DateTime.

Я пытался получить базовую функциональность рабочего за пределами DataTables первых, функция ниже работает как задумано, и выводит $current_date количества дней между $date и $date как: «16 дней в прямом эфире», «15 дней жить», и т.д .:

$sql = "SELECT CreatedDate FROM Estimates"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    $created_date = $row["CreatedDate"]; 
    $date = new DateTime($created_date); 
    $current_date = new DateTime(); 
    $diff = date_diff($date, $current_date); 
    echo $diff->format('%d days live'); 
} 
} else { 
echo "No results"; 
} 

в моих DataTables $columns массива, я пытаюсь добиться того же эффекта:

// date variable 
$created_date = 'CreatedDate'; 
$current_date = new DateTime(); 

// array of database columns which should be read and sent back to DataTables. 
// the 'db' parameter represents the column name in the database, while the 'dt' 
// parameter represents the DataTables column identifier. 
$columns = array(
array('db' => 'Client', 'dt' => 0), 
array('db' => 'EstimateNumber', 'dt' => 1), 
array('db' => 'Status', 'dt' => 2), 
array('db' => 'CurrentEstimateTotal', 'dt' => 3), 
array(
    'db' => $created_date, 
    'dt' => 4, 
    'formatter' => 
     function ($created_date, $row) use ($current_date) { 
     $date = new DateTime($created_date); 
     $diff = date_diff($date, $current_date); 
     echo $diff->format('%d days live'); 
    } 
) 
); 

я держу ПОЛУЧАТЬ ошибку в:

PHP Notice: Trying to get property of non-object.

Как это исправить? Мне трудно получить переменную var_dump() из переменных $created_date и $date в массиве DataTables, чтобы узнать, в чем проблема.

Для получения дополнительных сведений о обработке серверных данных DataTables, I am using this template as a base for my DataTables script. В сценарии DataTables также используется this helper class.. Заранее благодарю вас!

ответ

1

Просто верните строку из обратного вызова.

'formatter' => 
     function ($created_date, $row) use ($current_date) { 
     $date = new DateTime($created_date); 
     $diff = date_diff($date, $current_date); 
     return $diff->format('%d days live'); //That will solve your problem 
    } 
+0

Спасибо! Почему мне нужно «возвращать» вместо «echo»? – Liz

+0

Закрытие должно что-то вернуть, поэтому где-то внутри кода «datatable.com» он инициирует некоторый объект на его основе. Трудно сделать вывод изображения без возврата, поскольку нам обычно нужен результат :) – jaro1989

+0

Это работало как шарм! Спасибо! – Liz

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