Время Unix в миллисекундах до dMY

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

Я использовал http://www.epochconverter.com/ который правильно конвертирует его с 1328723926776 до 9.02.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

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


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

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

1 ответ

Вы пытались разделить на 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);
Другие вопросы по тегам