elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Decodificar fecha en dateformat de excel [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Decodificar fecha en dateformat de excel [Solucionado]  (Leído 10,722 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Decodificar fecha en dateformat de excel [Solucionado]
« en: 28 Abril 2009, 02:53 am »

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
Citar
Excel 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.


« Última modificación: 28 Abril 2009, 04:12 am por WHK » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Decodificar fecha en dateformat de excel
« Respuesta #1 en: 28 Abril 2009, 04:11 am »

Bueno, ya lo solucioné..

estuve buscando como trabajaba el formato time de unix asi que puse
Código
  1. <?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
  1. <?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é...

Código
  1. <?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
Citar
el número de serie 1 representa 1/1/1900
pruebo..
Código
  1. <?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:
Código
  1. function exceldate2timephp($int_exceldate){
  2. return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
  3. }

Uso:
Código
  1. <?php
  2. echo date("M-d-Y", exceldate2timephp('39818'));
  3.  
  4. function exceldate2timephp($int_exceldate){
  5. return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
  6. }
  7. ?>

Ojala que a alguien le pueda servir como a mi.


« Última modificación: 28 Abril 2009, 04:14 am por WHK » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Decodificar fecha en dateformat de excel [Solucionado]
« Respuesta #2 en: 28 Abril 2009, 04:26 am »

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

Código
  1. <?php
  2. $fecha_excel = '39818';
  3.  
  4. $dat_unix = exceldate2timephp($fecha_excel);
  5. $mes_unix = mktime(0, 0, 0, date('m', $dat_unix)+1  , date('d', $dat_unix), date('Y', $dat_unix));
  6. echo 'Actual: '.date('Y-m-d', $dat_unix).'<br />';
  7. echo 'Un mes despues: '.date('Y-m-d', $mes_unix).'<br />';
  8.  
  9. function exceldate2timephp($int_exceldate){
  10. return mktime(null, null, null, null, $int_exceldate - '36495', null, null);
  11. }
  12. ?>

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
VBA Excel, Loop de acuerdo a fecha
Software
edr89 4 3,689 Último mensaje 4 Diciembre 2011, 08:49 am
por edr89
buscar varios datos con fecha de proximidad (EXCEL)
Foro Libre
Zeroql 0 2,054 Último mensaje 4 Mayo 2013, 17:54 pm
por Zeroql
imprime mal fecha (solucionado)
PHP
basickdagger 7 7,508 Último mensaje 20 Agosto 2013, 19:54 pm
por basickdagger
[Solucionado] Decodificar unescape
Desarrollo Web
kaiserdj 2 2,126 Último mensaje 7 Abril 2017, 16:20 pm
por kaiserdj
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines