Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2017, 18:01
X_fran
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Manejo adecuado de fechas

Hola, trabajo en el desarrollo de una aplicación en la que es crucial el manejo adecuado de fechas para el cálculo de la edad gestacional de las embarazadas expresado en semanas, ejemplo: 40.6 semanas; es decir 40 semanas completas y 6 días de la siguiente; así como el cálculo de edad infantil para menores de 1 año, expresado en días o meses y días, ejemplo 6 meses y 4 días. En mis entidades los atributos los declaro de tipo DATE, ya que no necesito el componente hora - minuto.
En algunos action he tenido que formar fechas para hacer consultas en rangos ya que doctrine no maneja las funciones DATEPART, MONTH o YEAR, creo tendría que configurar alguna extensión, o comparativos de tipo e.fpp < :paramFecha.
Ahora bien, cada vez que debo formar alguna fecha, le paso al constructor de DateTime un formato 'm/d/Y', por ejemplo:
Código PHP:
$fecha=new DateTime("1/24/2017"); 
o para evitar errores en otros casos m'as puntuales lo manejo de la siguiente manera:
Código PHP:
$fecha=new DateTime('today');
$fecha->modify('- 6 month'); 
Al final me he dado cuenta que en los Repository al completar el parámetro de fecha, pasado desde el action o como propiedad de alguna entidad pasada como argumento a la function del repository hago lo siguiente:
Código PHP:
$query->setParameter('fechaInicio'$fecha->format('Y-m-d')); 
ó
Código PHP:
$fum=$entidad->getFum();
$query->setParameter('fechaInicial'$fum->format('Y-m-d')); 
Casualmente en un Repository, pasé un parámetro fecha de la siguiente forma:
Código PHP:
$query->setParameter('fechaInicio'$fecha->format('d/m/Y')); 
y al probar en un SGBD MySQL la consulta no dio error pero no arrojaba resultados, al cambiar el formato a 'Y-m-d', pues funciona bien tanto en MySQL como en Postgres.

Igualmente, pudiera dejar de la siguiente forma:
Código PHP:
$query->setParameter('fechaInicio'$fecha); 
y al ser un campo de tipo DATE pues la consulta runable que veo en el profiler completa las fechas de la siguiente forma: '2017-04-01 00:00:00'

Mi duda es si creando las fechas en el action de la forma new \DateTime("m/d/Y") y en los repository pasando el objeto fecha o $fecha->format('Y-m-d') debería funcionar tanto en MySQL como POstgres.