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.
Bueno, ya lo solucioné..
estuve buscando como trabajaba el formato time de unix asi que puse
<?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:
<?php echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997)); ?>
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é...
<?php echo date("M-d-Y", mktime(null, null, null, null, '39818', null, null)); ?>
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..
<?php echo date("M-d-Y", mktime(null, null, null, null, '1', null, null)); ?>
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:
function exceldate2timephp($int_exceldate){
return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
}
Uso:
<?php
echo date("M-d-Y", exceldate2timephp('39818'));
function exceldate2timephp($int_exceldate){
return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
}
?>
Ojala que a alguien le pueda servir como a mi.
Jugando un poco de como sumar meses al formato excel y pasarlo al formato unix :P
<?php
$fecha_excel = '39818';
$dat_unix = exceldate2timephp($fecha_excel);
$mes_unix = mktime(0, 0, 0, date('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(null, null, null, null, $int_exceldate - '36495', null, null);
}
?>
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.