Время Unix в миллисекундах до д-м-у - PullRequest
0 голосов
/ 09 февраля 2012

Я извлекаю время unix в миллисекундах из документа xml, но не могу преобразовать его в удобочитаемую дату (dmY) в php 5.2.17.

Я использовал http://www.epochconverter.com/ который правильно его преобразует из 1328723926776 в 2/9/2012 13: 37: 49

Я пробовал следующее:

$timestamp = $xml['LastBackupDate'];
echo '<br />Method 1: '.date("d-m-Y", $timestamp);
echo '<br />Method 2: '.date("d-m-Y", strtotime($timestamp));
echo '<br />Method 3: '.date("d-m-Y", strtotime($timestamp*1000));
echo '<br />Method 4: '.date("d-m-Y", strtotime($timestamp/1000));
echo '<br />Method 5: '.date("d-m-Y", $timestamp/1000);
echo '<br />Method 6: '.date("d-m-Y", (int)$timestamp);
echo '<br />Method 7: '.date("d-m-Y", intval($timestamp));
echo '<br />Method 8: '.date("d-m-Y", intval($timestamp)/1000);
echo '<br />Method 9: '.date("d-m-Y", intval($timestamp/1000));

, который возвращает:

Method 1: 
Method 2: 01-01-1970
Method 3: 01-01-1970
Method 4: 01-01-1970
Method 5: 25-01-1970
Method 6: 19-01-2038
Method 7: 19-01-2038
Method 8: 25-01-1970
Method 9: 25-01-1970

Есть идеи, как преобразовать это?Спасибо!


Редактировать, Лучший результат от использования:

echo date("d-m-Y", substr($xml['LastBackupDate'],0,-3));

1 Ответ

0 голосов
/ 09 февраля 2012

Вы пробовали делить на 1000 вместо умножения? Время эпохи обычно в секундах ...


ОК, теперь мне нужно учить PHP ...

date занимает формат и время. strtotime принимает удобочитаемую строку даты / времени и возвращает время. Ваше значение - время эпохи в миллисекундах, а не читаемая человеком строка, поэтому недопустимый аргумент strtotime.

Попробуйте Метод 4 без strtotime, в этом нет необходимости.


Да, это не сработало, потому что $timestamp - это строка (я предположил, что это уже целое число).

Вы говорите, что отбрасывание последних 3 символов строки дает вам большую часть пути, это то же самое, что преобразование в целое число, а затем деление на 1000. Ваши методы 6 и 7 конвертируются в int, но не делят - вам нужны оба!

Согласно для этого , date требуется целое число отметка времени в секундах . У вас есть строка, поэтому вы должны преобразовать ее в целое число. Это также в миллисекундах, поэтому вам нужно разделить на 1000, чтобы получить правильные единицы.

Обратите внимание, что время эпохи отсчитывается в секундах с первого января 1970 года. Поэтому, когда вы видите 01-01-1970, второй аргумент оценивается как ноль.

date("d-m-Y", $timestamp);                 <-- string, not int: treated as zero
date("d-m-Y", strtotime($timestamp));      <-- not a formatted time, gives zero
date("d-m-Y", strtotime($timestamp*1000)); <-- ditto
date("d-m-Y", strtotime($timestamp/1000)); <-- ditto
date("d-m-Y", $timestamp/1000);            <-- clearly nonzero, but no idea what!
date("d-m-Y", (int)$timestamp);            <-- correct type but in milliseconds
date("d-m-Y", intval($timestamp));         <-- correct type but in milliseconds

Если вы передаете целое число, содержащее количество секунд, а не миллисекунд, оно должно быть правильным.

Вот так:

date("d-m-Y", intval($timestamp)/1000);
...