Нечетное представление даты и времени в файлах Quickbooks My Time - PullRequest
0 голосов
/ 06 января 2011

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

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

<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 [@ name = 'start'] имеет значение:

308073428,00000000000000000000

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

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

1 Ответ

0 голосов
/ 06 января 2011

Похоже, что Quickbooks My Time использует некоторые версии 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');
?>

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

...