2010-08-10 3 views
3

У меня есть таблица с полем называется date_start и поле, называемое date_end Значения поля подобны этомуВычисление среднего времени заданного набора даты начала и окончания

year-month-day hours:minutes:seconds 

Мне нужно выяснить:

  • Сколько времени это для человека для выполнения задачи.
  • Среднее время, затрачиваемое всеми из них.

Я все еще немного новичок и честно понятия не имею, с чего начать с этого.

Спасибо за помощь.

+0

@JYelton Извините, я отредактировал вашу редакцию! – Artefacto

ответ

0

Начать здесь: strtotime() Эта функция преобразует ваше время в число, представляющее количество секунд с 1970 года. Затем вы можете вычесть одно из другого, чтобы найти прошедшие секунды.

http://us3.php.net/strtotime

+0

Что делать, если приложение отправляется на следующий день: date_start = 2009-01-13 18:53:28 date_end = 2009-01-14 14:39:10 –

+0

srtotime ("$ date_start"); sttime ("$ date_end"); все равно даст мне количество секунд? –

+0

$ num_seconds = strtotime ($ date_end) - strtotime ($ date_start); –

0

Я не проверял, но это будет работать:

SELECT (UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start)) AS personal_complete_time, 
AVG(UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start)) AS total_average 
FROM mytable 

Вы получите среднее количество секунд, чтобы завершить

0

Вы говорите, что у вас есть таблица с датами сохраняются в этом формате: год-месяц-день: минуты: секунды.

Вы уверены, что вы не используете поле datetime? Если это так, это решает половину вашей проблемы. Таким образом представлены поля Datetime.

0

Это будет работать:

$total_time_worked = 0; 
foreach($db_records as $time_entry) 
{ 
    $start = strtotime($time_entry['date_start']); 
    $end = strtotime($time_entry['date_end']); 

    // Time worked (in seconds) 
    $worked = $end-$start; 

    // Increment the total 
    $total_time_worked += $worked; 
} 

// Get the average time worked (in seconds) 
$average = $total_time_worked/count($db_records); 
+0

Независимо от размера набора данных, почти наверняка разумнее разместить работу в MySQL. Это может иметь очень низкую производительность, если набор данных большой. – Riedsio

1

Предполагая, что поля в MySQL является TIMESTAMP или DATETIME, я хотел бы использовать два запрос MySQL. Один для конкретных задач.

SELECT UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start) AS seconds_to_complete_task 
FROM a 

Один для среднего результата.

SELECT AVG(UNIX_TIMESTAMP(date_end)-UNIX_TIMESTAMP(date_start)) AS avg_seconds_to_complete_task 
FROM a 
Смежные вопросы