2011-01-06 3 views
0

Я пытаюсь обработать файлы Quickbooks My Time imt с помощью PHP. Файл imt представляет собой XML-файл с открытым текстом. Я был в состоянии использовать библиотеку PHP SimpleXML без проблем, но один:Нечетное представление datetime в Quickbooks Мои файлы времени

Числовые представлений DateTime в файлах My Time XML является то, что я никогда не видел раньше:

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

Вы можете видеть, что attritube [@ имя = 'старт'] имеет значение:

308073428.00000000000000000000

Это не на основе Excel метода хранения 308 073 428 слишком много дней с 1900-01-00, и это также не Unix Epoch.

Итак, мой вопрос в том, видел ли кто-нибудь такой тип представления времени?

ответ

0

Похоже, Quickbooks My Time imt использует некоторую версию OS X Core Data для хранения информации о приложении. После долгой работы я обнаружил, что Core Data/Cocoa использует 2000-01-01 00:00:00 как время начала их эпохи. Таким образом, это просто вопрос о добавлении секунды к эпохе, чтобы получить правильную дату:

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

Это достаточно хорошо, чтобы получить правильную дату, однако, я все еще не уверен, как обрабатывать значение справа от десятичной точки в течение допустимого времени.