Restar Fechas

hola estoy tratando de mostrar en el grid una columna personalizada que me muestre la resta de dos de los campos del grid, lo cuales serian fecha_det_a1 y fecha_ocu_a1

esta funcion deberia implemetarla en mi admin pq ahi es donde quiero que salga. Ya declare la variable en el model() correspondiente, ahora esta es la funcion:

<?php

function dateDiff($start, $end)

{

$start_ts = strtotime($start);

$end_ts = strtotime($end);

$diff = $end_ts - $start_ts;

return round($diff / 86400);

}

?>

<?php

$fdfo=dateDiff($model->fecha_det_a1,$model->fecha_ocu_a1);

?>

Cuando la voy a llamr dentro del grid lo hago asi

<?php $this->widget(‘zii.widgets.grid.CGridView’, array(

'id'=&gt;'anexo1-grid',


'itemsCssClass'=&gt;&quot;table table-striped&quot;,


'dataProvider'=&gt;&#036;model-&gt;search(),


.


.


'columns'=&gt;array(


	'id',


	array('name'=&gt;'no_hc_a1','value'=&gt;'&#036;data-&gt;no_hc_a1'),


            array('name'=&gt;'entidadhc_fk','value'=&gt;'&#036;data-&gt;entidadhcFk-&gt;enthc_nombre'),


            array('name'=&gt;'orga_hc_siglas','value'=&gt;'&#036;data-&gt;entidadhcFk-&gt;orgaFk-&gt;orga_hc_siglas'),


			.


			.


			[u]array('name'=&gt;'fdfo','value'=&gt;&#036;fdfo),[/u]


			.


			.


			array(


		'class'=&gt;'CButtonColumn',


	),


),

)); ?>

pero cuando voy a acceder a la vista admin me devuelve el siguiente error:

call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

Me pudieran ayudar?? Gracias

Lo que te dice el error es que no se está llamando correctamente a la función dateDiff (o por lo menos es lo que a mi me parece).

call_user_func_array

El parámetro 1 indica la propia función.

Además, no estoy de acuerdo que debas hacer eso en tu vista admin. De hecho, deberías hacer esta resta en la función que carga el CGridView, q podría ser por ejemplo la función search() de tu modelo. Así, ya devolverás un campo con la resta de fechas para cargar en tu CGridView para cada registro.

Como tú lo haces todos los registros del CGridView tendrán la misma diferencia de fechas.

Un saludo.

tienes razón, muchas gracias, ya lo cambié y funcionó casi perfecto, solo me da un problemita, cuando intento filtrar no tiene problema pero si uso un operador(<,>,<=,>= o <>) no me devuelve ningun resultado, alguna sugerencia??

Podría ser pq tienes distinto formato de fechas? Es decir, q en tu base de datos guardes en un formato y que en la web lo muestres con otro formato?

A mi el filtrado con fechas en PostgreSQL utilizando operadores me funciona correctamente.

Un saludo.

no es el filtrar por fechas lo que me da problema, yo lo hago sin problema alguno, el problema está en que la función de restar fechas me devuelve un número ya que me interesa obtener el resultado en días, en el grid me sale divino, de hecho puedo filtrar por un resultado especifico, pero cdo quiero poner < ó > que un resultado ej(<30) siendo 30 el resultado que me devuelve la función me pone vacío como si no existiera ningún elemento que coincida con ese criterio cdo en realidad si los hay.Me pudieras ayudar??

Buenas.

Haz un:




...

var_dump($_GET);

...



dentro de la función que utiliza el dataProvider de tu CGridView para ver los datos de filtrado que envía, o bien revisa Firebug y muestranos esos datos.

Te tendría que mostrar algo así:

<01/01/2014 (o el formato de fecha q utilices)

Si te muestra esto el problema está el la función que utiliza el CGridView, y podría ser que está comparando dos datos con distinto formato.

Un saludo.

cdo me dices que te ponga el resultado que sale en el firebus, es que lo ponga todo o solo el valor que y formato que me esta cogiendo la fecha

pq me la esta mistrando bien( <td>2013-01-29</td>) al igual que el valor que se supone que deberia de dar la resta entre fechas, lo que no se pq no me deja filtrar con operadores

no se si esto ayude en alguna forma pero aqui la documentacion de php para restar fechas o compararlas http://php.net/manual/es/datetime.diff.php

Lo que interesa es que muestres el valor que te muestra Firebug para las variables GET cuando haces la petición. En particular para la fecha.

Si no haz un:




...

var_dump($_GET);

...



En la función de carga del CGridView y muéstranos lo que te sale (utilizando o peradores, claro, q es lo q te falla).