Время 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);