Foros del Web » Programando para Internet » PHP »

Convertir una fecha!

Estas en el tema de Convertir una fecha! en el foro de PHP en Foros del Web. Hola! Por favor necesito urgente convertir la siguiente fecha: 39326.1770833 a la siguiente: 01/09/2007 04:15:00 estoy probando con getdate(), pero me hace falta multiplicar por ...
  #1 (permalink)  
Antiguo 04/11/2007, 13:25
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Convertir una fecha!

Hola!

Por favor necesito urgente convertir la siguiente fecha:

39326.1770833

a la siguiente:

01/09/2007 04:15:00

estoy probando con getdate(), pero me hace falta multiplicar por algun factor el primer numero que les menciono..

Agradezco infinitamente al que me ayude!
  #2 (permalink)  
Antiguo 04/11/2007, 13:31
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Re: Convertir una fecha! urgente plis!

Probastes dividir por 365.25 (dias del año) ? con eso tendrias la cantidad de años (considerando incluso bisiestos) desde la fecha de referencia (obviamente 1900)

Ej: 39326 / 365.25 me da 107 ... o sea... 2007 ;)

Años = (numerito / 365.25) + 1900

A la fraccion... le seguis aplicando este razonamiento para meses...dias.... horas....
  #3 (permalink)  
Antiguo 04/11/2007, 14:03
Avatar de hectorejch  
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 172
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Convertir una fecha!

Me parece que lo que más te conviene, y lo que buscas en esta funcion

Ejemplo:
echo date('d/m/Y H:i:s', '39326.1770833');
Creo que es así, no lo probé
__________________
"El Reino de Dios no consiste en palabras, sino en poder"

Última edición por hectorejch; 04/11/2007 a las 14:07 Razón: agrego ejemplo
  #4 (permalink)  
Antiguo 04/11/2007, 14:23
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

Muchas gracias por la ayuda!

Con la primera respuesta, la encuentro un poco complicada, porque desconozco cómo tendré que considerar los decimales y cuándo.

Con la segunda respuesta, la del date(), me retorna la siguiente fecha:

01/01/1970 07:55:26

Y encontré la solución, pero no he podido migrarla a la sintaxis de la base de datos Sybase:

Cita:
Si trabajar con información de tipo Fecha, dentro de cursores importados desde MS-Excel es algo raro, el trabajar con datos de tipo DateTime es igual o mas raro...En un artículo anterior ( Trabajar con Información Importada desde MS-Excel, conteniendo datos tipo Fecha [3]) hicimos una revisión de cómo y por qué pasan esas cuestiones de importar fechas, con los tipo de datos Fecha-Hora (DateTime) es practicamente el mismo caso.

La única diferencia radica en que ahora, en vez de exponernos un número entero, nos arroja un número decimal (con 10 dígitos de mantisa). Que significan esos números?, igualmente, son los días transcurridos desde el primero de enero de 1900, los decimales son la porción del día que ha transcurrido en la fecha mencionada. Por lo tanto, si se nos presenta un número como el siguiente: 38007.3568486921 donde su valor debería ser... 24/01/2004 08:33:52 AM, se debería leer: "Han pasado 38007 días y .3568486921 partes del día de hoy, desde el 1 de Enero de 1900".

Así pues, el cálculo es un poquitin más pesado, pero no muy dificil:


lcFile = GETFILE("XLS")
IF NOT EMPTY(lcFile)
IMPORT FROM (lcFile) TYPE XL5
lcAlias=ALIAS()
SELECT *,DATETIME(1900,01,01)+((INT(TUCampoFecha)-2)*86400)+;
(86400*(TuCampoFecha-INT(TuCampoFecha))) as NuevaFecha ;
FROM (lcAlias)
ENDIF


La artimética de los tipos de datos DateTime es un poco distinta a las de tipo Fecha, en Fecha-Hora, sumar algún número siempre será en base de segundos, en los tipo DATE, la base es en días. Por lo tanto he separado un poco los cálculos que a realizar, primero:


(INT(TuCampoFecha)-2)*86400)


Esto representa la parte entera (menos 2) de la "fecha" por 86400, esto es para dejar un número correspondiente a todos los segundos que contendría la fecha importada.

En segundo lugar vendrá la parte de la hora:


(86400*(TuCampoFecha-INT(TuCampoFecha)))


Aquí multiplicamos la parte fraccionaria de nuestro fecha, por 86400, esto para sacar los segundos correspondientes al hora de nuestro dato, así pues, si tomaramos los datos arriba mencionados:


Fecha=38007*86400 = 3283804800
Hora = (38007.3568486921 - 38007) * 86400 = 30831.72699744
FechaHora = 3283835631.72699744
FechaOriginal = DATETIME(1900,1,1)+ 3283835631.72699744 = 23/01/2004 08:33:52 AM


Con esto ya se puede revisar un nuevo dato, ahora sí, de tipo DateTime, con los valores correctamente representandos.

Si alguien me puede ayudar le estaré muy agradecido!!!
  #5 (permalink)  
Antiguo 04/11/2007, 14:52
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

estoy al borde del suicidio

aún no he podido resolver esto.

Olvidé mencionar que estoy en servidor Windows (IIS), es decir, la fecha de referencia creo que es 01/01/1970
  #6 (permalink)  
Antiguo 04/11/2007, 15:15
 
Fecha de Ingreso: julio-2007
Mensajes: 71
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: Convertir una fecha!

Código PHP:
<?

$numero 
39326.1770833;
$anio = (39326.1770833/365.25)+1900;
$anio2 39326.1770833%365.25;
$mes $anio2/30;
$mes2 $anio2%39;
$dia $mes2/24;
$dia2 $mes2%24;


echo 
"año: $anio mes: $mes dia: $dia.<br>";

?>
Ahi pude sacar lo q pude...
lo de la hora no tengo exito, pero ahora toy medio ocupado...
espero q te sirva aunque sea un poco :P
  #7 (permalink)  
Antiguo 04/11/2007, 15:26
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

muchas gracias, pero tampoco puedo sacar la hora, minutos y segundos..

por qué usaste un 39? son números al azar o responden a un cálculo matemático???

por favor ayuda!!!!
  #8 (permalink)  
Antiguo 04/11/2007, 15:43
 
Fecha de Ingreso: julio-2007
Mensajes: 71
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: Convertir una fecha!

ay no.. perdon =S
quise poner 30, pero ahora me di cuenta q me dio 0 :|
no se, fijate vos.. tenes que hacer un promedio de la cantidad de dias de cada mes en un año, ahi seguro q sacas...
despues lo de hora, minutos y segundos no me da =S creo que falta decimales...
decime, como pudiste sacar la fecha q acabas de mostrar en el primer post? o mejor dicho de donde los sacaste?
  #9 (permalink)  
Antiguo 04/11/2007, 15:53
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

La fecha 39326.1770833

la obtengo de un campo DateTime de un archivo Excel, que corresponde a la fecha 01/09/2007 04:15:00

Por lo que estoy investigando, este tipo de fecha se llama OleDate...

Aún no encuentro una función que la convierta a una fecha apta para seres humanos
  #10 (permalink)  
Antiguo 04/11/2007, 16:30
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

Amigos:

Encontré la solución:

Código PHP:
$fecha1 = (39326.0104167 25569.833299) * 86400;
echo (
date("d/m/Y H:i:s",$fecha1)."<br />"); 
Esto me retorna: 01/09/2007 00:15:02

Tiene un margen de error de 2 segundos, pero no pude llegar a un número (25569.833299) que obtuviera 0 segundos. Pero para mi caso da igual, porque debo asumir que los segundos son igual a 00.

Por lo que leí en otra página (un foro de discusión en Sourgeforge, sobre la librería Spreadsheet_Excel_Reader que estoy usando), se suma un 1 para corregir un error.

Muchas gracias a los que leyeron y quisieron ayudarme.

GUARDEN ESTA SOLUCION!! Creo que ha sido el problema que más me ha llevado tiempo solucionar (en programación, claro está).

Saludos comunidad.

PD: El valor 39326.0104167 corresponde a la fecha 01/09/2007 00:15:00, no a la mencionada en el primer post.

Última edición por chilenozzz; 04/11/2007 a las 16:48
  #11 (permalink)  
Antiguo 04/11/2007, 17:13
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Convertir una fecha!

Colocala en los Faq's... ahi es mas util y de mas facil acceso
__________________
Nuevamente a las pistas ...
  #12 (permalink)  
Antiguo 04/11/2007, 17:29
Avatar de chilenozzz  
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

Listo, agregado al FAQ
  #13 (permalink)  
Antiguo 26/11/2007, 14:15
 
Fecha de Ingreso: noviembre-2007
Ubicación: Valparaiso, Chile
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Convertir una fecha!

Hola...

A nosotros no nos resulto con este valor, ya que nos arrojaba mal el tiempo, por un desface de 1 hora y ademas los 2 segundos de falla.
Código PHP:
$fecha1 = (39326.0104167 25569.833299) * 86400;
echo (
date("d/m/Y H:i:s",$fecha1)."<br />"); 

asi que el GRAN OSCAR calculo las hora y pudo dar con el numero que da exactamente, con el cual da la hora y segundos exactos, sin falla alguna. con el siguiente numero: 25569.874999

Código PHP:
$fecha1 = (39326.0104167 25569.874999) * 86400;
echo (
date("d/m/Y H:i:s",$fecha1)."<br />"); 

Última edición por Manu_Opx; 26/11/2007 a las 14:22
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:52.