#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