У меня есть CSV-файл со следующими значениями:
Iteration, Duration
0,00:00:02.694414
81,00:00:02.790214
82,00:00:02.933225
83,00:00:03.077099
84,00:00:03.220184
85,00:00:03.363437
Во втором столбце его у меня есть время в формате H:i:s.ss
, и мне нужно рассчитать среднюю продолжительность: sum(Duration)/csv_size
Для этого я использую эту функцию:
/**
* convert a DateTimeIntervalIn milliseconds
* @return int Time in miliseconds
*/
function intervalInMiliseconds(DateInterval $interval) : float
{
return ($interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s)*1000 + ($interval->f*1000);
}
/**
* Undocumented function
*
* @return int
*/
function calculateAverageTime(string $csvFile)
{
if ( !file_exists($csvFile) ) {
throw new Exception('File not found.');
}
$file = fopen($csvFile,"r");
$count=0;
$duration= new DateTime('00:00');
$durationCalc= clone $duration;
while(($data = fgetcsv($file, 1000, ",")) !== FALSE){
$duration->add( DateInterval::createFromDateString($data[1]));
$count++;
}
if($count == 0)
{
throw new Exception("No Data In the CSV");
}
$duration=$duration->diff($durationCalc);
$averageSeconds=intervalInMiliseconds($duration)/$count;
fclose($file);
return $averageSeconds;
}
$time = calculateAverageTime(__DIR__.'/timestamps.csv');
echo $time;
Но у меня вопрос, как я могу отформатировать DateInterval
в миллисекундах, чтобы иметь возможность вычислять среднее время в миллисекундах Я получаю 0, результат, который мне не подходит. Я ожидаю доли миллисекунд, но не 0 с данными, приведенными выше.
Поэтому знаете, как это исправить?
Редактировать 1: быстрый var_dump показывает
var_dump($datetime);
Показывает ошибку при разборе моих временных меток в DateInterval:
class DateInterval#1 (16) {
public $y =>
int(0)
public $m =>
int(0)
public $d =>
int(0)
public $h =>
int(0)
public $i =>
int(0)
public $s =>
int(0)
public $f =>
double(0)
public $weekday =>
int(0)
public $weekday_behavior =>
int(0)
public $first_last_day_of =>
int(0)
public $invert =>
int(0)
public $days =>
bool(false)
public $special_type =>
int(0)
public $special_amount =>
int(0)
public $have_weekday_relative =>
int(0)
public $have_special_relative =>
int(0)
}
Так как мне преобразовать метку времени из csv в DateInterval?