UT C время с вычислением 7 десятичных знаков - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужно вычислить разницу между 2 UT C значениями времени с 7 десятичными числами в PHP 7,3

Могу ли я просто сделать следующее:

val1 = 20200205120415.6513380; //first timestamp
val2 = 20200205120415.6535670; //second timestamp
$diff = $val2 - $val1; //should be difference between the 2 timestamps

Значение вышеуказанный расчет составляет 0,002229. Если я делаю это правильно, это значение в секундах или микросекундах, и смогу ли я преобразовать его в UNIX метку времени?

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Я сильно подозреваю, что вышеуказанные времена не являются простыми числами; они BCD (двоично-десятичные) для 2020-02-05-12: 04: 15.6513380. Вы не можете сделать простую математику с ними, и вам нужно будет проанализировать их, чтобы преобразовать в unix отметку времени.

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

0 голосов
/ 08 февраля 2020

Вот мое текущее решение для полноты.

Значения справа от. действительно доли секунды. Таким образом, в PHP, чтобы получить разницу, я сделал следующее:

$start = 20200205120415.6513380;
$end = 20200205120415.6535670;

//get value left of . and then create datetime object to later convert to seconds
list($datetime, $usecStart) = explode(".", $start);
$startTime = date_create_from_format("YmdHis", $datetime);
list($datetime, $usecEnd) = explode(".", $end);
$endTime = date_create_from_format("YmdHis", $datetime);

//get timestamp in seconds and add franction or microseconds back
$start = $startTime->getTimestamp().".".$usecStart;
$end = $endTime->getTimestamp().".".$usecEnd;

//get difference in seconds and fraction or microseconds
echo $end - $start;

Вот еще один способ использования функции datetime-> diff ():

$start = new DateTime('2020-02-05T12:04:15.6513380Z');
$end = new DateTime('2020-02-05T12:04:15.6535670Z');

$diff = $start->diff($end);
echo $diff->format('%h:%i:%s.%F');
...