Нужно вычесть два раза для разницы. Не получая нужных мне результатов

#php #string #time

#php #строка #время

Вопрос:

Я пытался увеличить время, чтобы работать с частями до и после «:» с минимальным успехом. Я получаю оба раза через XML-канал, поэтому я могу преобразовать полученные строки по мере необходимости или умножить их на другую цифру для работы по мере необходимости.

 $time_1 = "00:59.8408";

$time_2 = "01:00.4734";

$difference = $time_2 - $time_1;
  

или другой способ вычисления разницы, должен вернуть мне

 0.6326
  

Я буду рад принять любой совет. Я попытался вычесть преобразованные переменные strtotime, я, как я упоминал выше, разорвал строку с неблагоприятными результатами. Я считаю, что миллисекунды также были препятствием, с которым я не работал в прошлом.

Я ценю, что вы читаете это.

Комментарии:

1. Как вы это делаете, вставьте код здесь, а также укажите ошибку, с которой вы столкнулись..

Ответ №1:

Оператор минус в PHP работает только с числами. Ваши строки будут преобразованы в числа, которые затем равны 1 — 0, поэтому разница равна 1:

 $time_1 = "00:59.8408";

$time_2 = "01:00.4734";

$difference = $time_2 - $time_1;

var_dump($difference); # int(1)
  

Вместо этого напишите функцию, которая преобразует строку в секунды в виде числа с плавающей точкой, как в этом примере:

 /**
 * convert time string to seconds
 *
 * @param string $time %i:%s.%u
 * @return float
 */
function time_to_seconds($time) {
    sscanf($time, '%d:%f', $minutes, $seconds);
    return $minutes * 60   $seconds;
}
  

Это довольно просто: сначала просканируйте строку на наличие цифр, затем двоеточия, а затем числа с плавающей точкой. Поскольку первые цифры — это минуты, умножьте их на 60 и добавьте секунды в виде числа с плавающей точкой (одна минута равна 60 секундам). Верните результат (там нет проверки ошибок, см. sscanf Чтобы превратить это в производственный код.

Затем выполните операцию с результатами:

 $difference_in_seconds = time_to_seconds($time_2) - time_to_seconds($time_1);

var_dump($difference_in_seconds); # double(0.6326)
  

И это все. Самая важная часть заключается в том, что вам нужно знать, как обрабатывать данные, которые закодированы в вашей строке (строках) здесь. Проанализируйте строку в соответствии с этим.

Комментарии:

1. Это, безусловно, было отличным решением. Очень признателен. Я также добавил в number_format ($difference_in_seconds, 4) после для нужной мне точности. 1