Разница во времени Unix в минутах дает неожиданные результаты - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть следующий простой код для тестирования:

$start_time_unix = time();
$end_time_unix = time();
$seconds_diff = $end_time_unix - $start_time_unix;    
$duration = round(abs($seconds_diff/1000) / 60,2);

Когда я сохраняю его в MySQL (int), в результате получаются большие значения, например 25634, даже на несколько секунд.Как я могу получить минуты, даже в доли минуты?Что не так с моим кодом выше ??

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Функция time() возвращает текущую метку времени Unix в секундах .Нет необходимости делить его на 1000. Поскольку MySQL ожидает целое число, вы должны округлить до 0 десятичных знаков:

$seconds_diff = abs($end_time_unix - $start_time_unix);
$duration = round($seconds_diff / 60, 0);
0 голосов
/ 27 сентября 2018

Прежде всего int не может хранить дроби, поэтому вы, вероятно, захотите использовать float или double.

Но почему вы делите на 1000.$seconds_diff состоит из секунд , поэтому деление на 60 даст вам долю минуты.

Например: если $seconds_diff является значением 13 [секунд]:

$duration_in_minutes = round($seconds_diff / 60, 2);
$duration_in_milliseconds = $seconds_diff * 1000;

Если ваша цель - использовать миллисекунды , тогда используйте microtime() вместо time(): http://php.net/manual/de/function.microtime.php

Рекомендация
Просто измерьте время с помощью microtime() и сохраните результат непосредственно в базе данных без округления, деления или форматирования.Затем выполните форматирование, когда вам придется его выводить.Это даст вам более точные результаты и больше свободы.

$start_time = microtime();
…
$end_time = microtime();
$duration = $end_time - $start_time; // duration in milliseconds --> save to database

При выводе, например:

$duration = get_duration_from_database(); // pseudo function
printf('%.2f minutes', $duration / 1000 / 60);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...