Decodificar fecha en dateformat de excel [Solucionado]

Iniciado por WHK, 28 Abril 2009, 02:53 AM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Tengo un pequeño problema y es que tengo un valor de una fecha: "39818" que significa "2009-01-05" y necesitaba hacer la función que hiciera el calculo pero ando un poco perdido.. estuve buscando información acá:
http://support.microsoft.com/kb/214094
CitarExcel almacena todas las fechas como enteros y todas las horas como fracciones decimales. Con este sistema, Excel puede sumar, restar o comparar fechas y horas como cualquier otro número, y todas las fechas se manipulan utilizando este sistema.

En este sistema, el número de serie 1 representa 1/1/1900 12:00:00 a.m. Las horas se almacenan como números decimales entre ,0 y ,99999, donde ,0 es 00:00:00 y ,99999 es 23:59:59. Los enteros de fecha y las fracciones decimales de hora pueden combinarse para crear números que tengan una parte decimal y una parte entera. Por ejemplo, el número 32331,06 representa la fecha 7/7/1988 y la hora 1:26:24 a.m.

Ahora no se como podría calcular las fechas para ir corriendo dia, mes y año según el número que me arroja el excel. Este problema lo tube al importar archivos con el formato de la fecha cambiado y debo compatibilizarlo.

Lo otro sería pasar de ese formato a getmicrotime() y de ahi convertir a date() pero no se cual sería la equivalencia, al parecer los decimales debo convertirlos en entro pero no estoy seguro.. mientras tanto que hago pruebas y comparar fechas con ambos formatos espero que alguien me pueda dar una orientación.

Si lo resuelvo antes igual lo dejaré posteado.

Gracias.

WHK

#1
Bueno, ya lo solucioné..

estuve buscando como trabajaba el formato time de unix asi que puse
Código (php) [Seleccionar]
<?php echo date('Y-m-d'1); ?>

y así hasta llegar a 10000 que era el valor por dia ya que el resto son minutos, horas, segundos y centecimas de segundo.. pero pude ver un desface de 1 dia por cada 135 dias asi que no me sirvió  :P.. busqué y encontré muchas funciones como por ejemplo strftime, mktime, gmmktime, etc.. al final que pude ver una que meajustaba a lo que necesitaba: "mktime".

Pude ver que podias asignar una variable con una fecha en formato unix:
Código (php) [Seleccionar]
<?php echo date("M-d-Y"mktime(00012321997)); ?>

Pero intenté dar valores nulos y solo proporcionar el dia, no sabia si funcionaría ya que se supone el dia debería ser del 1 al 31 o por lo menos no lo especificaba en ningun lado pero lo intenté...

Código (php) [Seleccionar]
<?php echo date("M-d-Y"mktime(nullnullnullnull'39818'nullnull)); ?>

Biieennn!! ahora solo es cuestión de restarle el desface de fecha entre el primer dia del formato unix al primer dia del formato excel:
http://support.microsoft.com/kb/214094
Citarel número de serie 1 representa 1/1/1900
pruebo..
Código (php) [Seleccionar]
<?php echo date("M-d-Y"mktime(nullnullnullnull'1'nullnull)); ?>

Tengo la fecha "Dec-01-1999" y "1/1/1900" asi que lo resté en valores de dias y saqué el valor "36495:D

Ya con estos datos puedo hacer mi función:
Código (php) [Seleccionar]
function exceldate2timephp($int_exceldate){
return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
}


Uso:
Código (php) [Seleccionar]
<?php
echo date("M-d-Y"exceldate2timephp('39818'));

function 
exceldate2timephp($int_exceldate){
 return 
mktime(nullnullnullnull$int_exceldate '36495'nullnull);
}
?>


Ojala que a alguien le pueda servir como a mi.

WHK

Jugando un poco de como sumar meses al formato excel y pasarlo al formato unix  :P

Código (php) [Seleccionar]
<?php
$fecha_excel 
'39818';

$dat_unix exceldate2timephp($fecha_excel);
$mes_unix mktime(000date('m'$dat_unix)+1  date('d'$dat_unix), date('Y'$dat_unix));
echo 
'Actual: '.date('Y-m-d'$dat_unix).'<br />';
echo 
'Un mes despues: '.date('Y-m-d'$mes_unix).'<br />';

function 
exceldate2timephp($int_exceldate){
 return 
mktime(nullnullnullnull$int_exceldate '36495'nullnull);
}
?>


Esque se supone que por cada quota de pago debe aumentar la fecha a un mes  :P para que la persona pueda pagar una quota mensual y los datos de todos los clientes están en archivos excel mientras que migran a un sistema php.