У меня есть этот гекс 2a ba ce 21
который я перевел в десятичную 716885537
Теперь я попросил сделать следующее:
2a ba ce 21
дано; теперь выводит последнее обновленное время в секундах (секунды, прошедшие с 1 января 2000 г.) — 4 байта
Для преобразования в стандартное время эпохи добавьте значение временного смещения 946684800 (временное смещение с января 1970 года по январь 2000 года)
Я много искал и, честно говоря, все перемешалось … Было бы здорово, если кто-нибудь подскажет мне, как это сделать в PHP.
все смешалось …
Попытка размешать вещи …
Предположительно, ваши шестнадцатеричные байты расположены в порядке с прямым порядком байтов, поэтому перед конвертацией вам нужно повернуть вспять
<?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";
Других решений пока нет …