我有一个十六进制2a ba ce 21
,我将其转换为十进制716885537
,现在我要执行的操作是:
2a ba ce 21
被给出;现在以秒为单位打印上次更新时间(自2000年1月1日午夜以来经过的秒数)-4字节
要转换为标准时间,请添加时间偏移值946684800(1970年1月至2000年1月的时间偏移)
我搜索了很多东西,说实话,每件事都很复杂...如果有人告诉我如何用PHP做到这一点,那将是很大的帮助。
答案 0 :(得分:1)
万事万物...
试图分解事物...
大概您的十六进制字节是低位字节序,因此在转换之前必须先反转。
<?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";