Foros del Web » Programando para Internet » PHP »

Problemas en formato de fecha desde PHP hacia SQl Server 2000

Estas en el tema de Problemas en formato de fecha desde PHP hacia SQl Server 2000 en el foro de PHP en Foros del Web. Muy buenas, Tengo un extraño problema que no me había sucedido nunca... Estoy programando en PHP versión 5.2.0 sobre un servidor Linux contra SQL Server ...
  #1 (permalink)  
Antiguo 23/07/2008, 09:27
Avatar de Scour  
Fecha de Ingreso: octubre-2003
Ubicación: Murcia (España)
Mensajes: 94
Antigüedad: 16 años, 1 mes
Puntos: 0
Problemas en formato de fecha desde PHP hacia SQl Server 2000

Muy buenas,

Tengo un extraño problema que no me había sucedido nunca... Estoy programando en PHP versión 5.2.0 sobre un servidor Linux contra SQL Server 2000 en un servidor MS Window Server 2003. Para el tránsito de datos utilizo la clase mssql con la siguiente configuración:

Directive Local Value Master Value
mssql.allow_persistent On On
mssql.batchsize 0 0
mssql.charset no value no value
mssql.compatability_mode Off Off
mssql.connect_timeout 5 5
mssql.datetimeconvert Off Off
mssql.max_links Unlimited Unlimited
mssql.max_persistent Unlimited Unlimited
mssql.max_procs Unlimited Unlimited
mssql.min_error_severity 10 10
mssql.min_message_severity 10 10
mssql.secure_connection Off Off
mssql.textlimit Server default Server default
mssql.textsize Server default Server default
mssql.timeout 60 60

Y el problema es el siguiente:

La base de datos está configurada en castellano, y guarda las fechas en formato dd/mm/yyyy hh:mm:ss sin embargo, si desde PHP lanzo la siguiente query:

Código:
select * from tabla where campofecha > '15/12/2007'
A la base de datos llega modificada del siguiente modo:

Código:
select * from tabla where campofecha > '12/15/2007'
La clase mssql intercambia la posición del día por la del mes... he hecho un echo antes de enviar la query y me escribe las fecha en formato dd/mm/yyyy, pero al servidor de base de datos la envía como mm/dd/yyyy...

No he conseguido encontrar documentación alguna sobre este problema, si alguien puede echarme un cable...

Muchas gracias.
  #2 (permalink)  
Antiguo 23/07/2008, 13:03
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.990
Antigüedad: 14 años, 10 meses
Puntos: 80
Respuesta: Problemas en formato de fecha desde PHP hacia SQl Server 2000

Testeaste poniendo el campo completo como: '15/12/2007 00:00:00' ?
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 24/07/2008, 05:10
Avatar de Scour  
Fecha de Ingreso: octubre-2003
Ubicación: Murcia (España)
Mensajes: 94
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problemas en formato de fecha desde PHP hacia SQl Server 2000

Nada, añadiendo la hora sucede lo mismo... intercambia el día por el mes.
  #4 (permalink)  
Antiguo 24/07/2008, 09:20
Avatar de Scour  
Fecha de Ingreso: octubre-2003
Ubicación: Murcia (España)
Mensajes: 94
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problemas en formato de fecha desde PHP hacia SQl Server 2000

Solucionado. Explico la solución para quien pueda ayudar:

Por lo visto, la clase (el por qué en mi caso sí, y en otros no, no lo sé) mssql de PHP envía una cabecera Transact-SQL indicando el formato de la fecha como mm/dd/yyyy:

Código:
SET DATEFORMAT mdy
de este modo, aunque se tenga la base de datos en castellano (y por la tanto la fecha en formato dd/mm/yyyy), para la conexión establecida SQL Server considerará la fecha como mm/dd/yyyy.

En teoría, poniendo en el php.ini el parámetro mssql.datetimeconvert igual a 0 (0 u Off) sería suficiente, pero en mi caso no ha funcionado (la clase envía la misma cabecera con el parámetro activo o inactivo).

Para solucionarlo, cada query que se envíe debe llevar la cabecera siguiente:

Código:
set dateformat dmy
De ese modo se machaca el valor establecido por la clase mssql.

El resultado sería:

Código PHP:
$query "set dateformat dmy\n"
$query .= "select * from tabla where campofecha > '15/12/2007'" 
Saludos.
  #5 (permalink)  
Antiguo 24/07/2008, 09:43
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Mensajes: 753
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Problemas en formato de fecha desde PHP hacia SQl Server 2000

Cita:
Iniciado por Scour Ver Mensaje
Solucionado. Explico la solución para quien pueda ayudar:

Por lo visto, la clase (el por qué en mi caso sí, y en otros no, no lo sé) mssql de PHP envía una cabecera Transact-SQL indicando el formato de la fecha como mm/dd/yyyy:

Código:
SET DATEFORMAT mdy
de este modo, aunque se tenga la base de datos en castellano (y por la tanto la fecha en formato dd/mm/yyyy), para la conexión establecida SQL Server considerará la fecha como mm/dd/yyyy.

En teoría, poniendo en el php.ini el parámetro mssql.datetimeconvert igual a 0 (0 u Off) sería suficiente, pero en mi caso no ha funcionado (la clase envía la misma cabecera con el parámetro activo o inactivo).

Para solucionarlo, cada query que se envíe debe llevar la cabecera siguiente:

Código:
set dateformat dmy
De ese modo se machaca el valor establecido por la clase mssql.

El resultado sería:

Código PHP:
$query "set dateformat dmy\n"
$query .= "select * from tabla where campofecha > '15/12/2007'" 
Saludos.
yo prefiero para este tipo de consultas
SELECT * FROM tabla WHERE convert(datetime,campofecha,103) between convert(datetime,fecha_conhora1,103) and convert(datetime,fecha_conhora2,103)

y me olvido de los formatos...
__________________
Unete: Foro especializado en SEO y Monetización
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:20.