как использовать время эпохи в php, добавив значение смещения времени - PullRequest
0 голосов
/ 02 октября 2018

У меня есть этот гекс 2a ba ce 21, который я преобразовал в десятичное 716885537, теперь я попросил сделать следующее:
2a ba ce 21 дано;теперь выводить последнее обновленное время в секундах (секундах, прошедших с 1 января 2000 г.) - 4 байта
Для преобразования в стандартное время эпохи добавьте значение смещения времени 946684800 (смещение с января 1970 г. по январь.2000)

Я много искал и, честно говоря, все было перепутано ... Было бы здорово помочь, если кто-нибудь скажет мне, как это сделать в PHP.

1 Ответ

0 голосов
/ 02 октября 2018

все перемешалось ...

Попытка размешать вещи ...
Предположительно, ваши шестнадцатеричные байты расположены в порядке с прямым порядком байтов, поэтому перед преобразованием вам нужно повернуть вспять.

<?php
$timestamp = hexdec(implode(array_reverse(explode(' ', '2a ba ce 21'))));
echo "seconds:  ", $timestamp+946684800, "\n";
echo "readable: ", date('r', $timestamp+946684800), "\n";

что если бы мне пришлось также преобразовать 2c 00 в последнее обновленное время в миллисекундах, которое составляет 2 байта.

Преобразование происходит так же, как описано выше.Если вы хотите присоединить миллисекунды к отметке времени, добавьте к ней их, разделенные на 1000.

$timestamp = hexdec(implode(array_reverse(explode(' ', '2a ba ce 21'))));
$millisecs = hexdec(implode(array_reverse(explode(' ', '2c 00'))));
$timestamp += 946684800 + $millisecs/1000;
echo "seconds:  ", $timestamp, "\n";
date_default_timezone_set('UTC');
echo "readable: ", date('Y-m-d H:i:s.', $timestamp).substr("00$millisecs", -3), "\n";
...