Pregunta

Estoy intentando proceso quickbooks mi tiempo archivos IMT usando PHP. El archivo de IMT es un archivo de texto plano XML. He sido capaz de utilizar la librería PHP SimpleXML sin problemas, pero uno:

Las representaciones numéricas de fecha y hora en los archivos XML mi tiempo es algo que nunca he visto antes:

<object type="TIMEPERIOD" id="z128">
    <attribute name="notes" type="string"></attribute>
    <attribute name="start" type="date">308073428.00000000000000000000</attribute>
    <attribute name="running" type="bool">0</attribute>
    <attribute name="duration" type="double">3600</attribute>
    <attribute name="datesubmitted" type="date">310526237.59616601467132568359</attribute>
    <relationship name="activity" type="1/1" destination="ACTIVITY" idrefs="z130"></relationship>
</object>

Se puede ver que attritube [@ name = 'start'] tiene un valor de:

308,073,428.00000000000000000000

Este método no se basa en Excel de almacenamiento es 308073428 demasiados días desde el 1900-01-00 y no es Unix Epoch tampoco.

Por lo tanto, mi pregunta es, ¿alguien ha visto este tipo de representación de fecha y hora?

¿Fue útil?

Solución

Parece que Quickbooks Mi Tiempo IMT está utilizando una versión de OS X Core Data para almacenar la información de la aplicación. Después de cavar alrededor de un rato, me encontré con que la base de datos / Cacao utiliza 2000-01-01 00:00:00 como hora de inicio para su época. Por lo tanto, es simplemente una cuestión de añadir los segundos de la época para obtener la fecha correcta:

<?php
  $start_as_int = (int) $node;
  $dt = new DateTime('2010-01-01 00:00:00');
  $dt->add(new DateInterval('PT'.$start_as_int.'S'));
  print $dt->format('m/d/Y');
?>

Esto es lo suficientemente bueno para obtener la fecha correcta, sin embargo, todavía no estoy seguro de cómo procesar los valores a la derecha del punto decimal para una hora válida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top