2011-01-06 5 views
0

Ich versuche Quickbooks My Time IMT-Dateien mit PHP zu verarbeiten. Die IMT-Datei ist eine Klartext-XML-Datei. Ich habe in der Lage, die PHP SimpleXML Bibliothek ohne Probleme zu benutzen, aber ein:Odd datetime Darstellung in Quickbooks Meine Zeit Dateien

Die numerischen Darstellungen von Datetime in den My Time XML-Dateien ist etwas, das ich noch nie gesehen habe:

<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> 

Sie können sehen, dass attritube [@ name = 'start'] einen Wert von:

308073428,00000000000000000000

Dies ist nicht Excel-basierte Verfahren von Speicher 308.073.428 ist zu viele Tage seit 1900-01-00 und es ist auch keine Unix-Epoche.

Also, meine Frage ist, hat jemand diese Art von Datetime-Darstellung jemals gesehen?

Antwort

0

Es sieht aus wie Quickbooks My Time imt verwendet einige Version von OS X Core Data, um die Anwendungsinformationen zu speichern. Nachdem ich eine Weile herumgegraben hatte, fand ich heraus, dass Core Data/Cocoa 2000-01-01 00:00:00 als Startzeit für ihre Epoche verwendet. Daher ist es einfach eine Frage der Sekunden auf die Epoche Hinzufügen das richtige Datum zu erhalten:

<?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'); 
?> 

Das ist gut genug um das richtige Datum zu bekommen, aber ich bin immer noch nicht sicher, wie die Werte zu verarbeiten das Recht auf den Dezimalpunkt für eine gültige Zeit.