Привет.
В своём ответе я покажу реализацию твоей задачи на PHP, и постараюсь объяснить подробнее каждый шаг.
Для теста я сделал простую форму с textarea, которая отдает данные на PHP через POST:
Форма с textarea:
Код:
Blasthack - answer by USEC
Go
В мире программистов существует парадигма разработки алгоритмов, которая именуется как "разделяй и властвуй". Принцип прост, мы делим задачу на мелкие и легко решаемые задачи, чтобы в конечном счете решить общую задачу.
1. Полученные даты с формы мы преобразуем в массив, где каждая ячейка массива будет соответствовать одной дате.
2. Преобразуем полученные данные (массив из пункта 1) под формат даты.
3. Соберем часы, минуты и секунды в три массива hours, min, sec.
4. Найдем сумму часов, минут и секунд.
5. Произведем конечные расчеты времени, если минут или секунд более 60, то переведем их в часы и минуты соответственно.
Ниже я разместил код на PHP с комментариями.
Код на PHP, который считает время из формы:
Код:
if
(
isset
(
$_POST
[
'dates'
]
)
)
{
// Преобразуем полученные данные с формы в массив
$data_array
=
explode
(
')'
,
$_POST
[
'dates'
]
)
;
// Преобразуем полученный массив в многомерный массив под формат даты
$i
=
0
;
foreach
(
$data_array
as
$da
)
{
$data_format_array
[
$i
]
=
date_parse_from_format
(
"Y-m-d (H:i:s"
,
$da
)
;
$i
++
;
}
// Теперь соберем часы, минуты и секунды в массивы
$i
=
0
;
foreach
(
$data_format_array
as
$dfa
)
{
$hours
[
$i
]
=
$dfa
[
'hour'
]
;
$min
[
$i
]
=
$dfa
[
'minute'
]
;
$sec
[
$i
]
=
$dfa
[
'second'
]
;
$i
++
;
}
// Находим сумму часов, минут и секунд
$sum_hours
=
array_sum
(
$hours
)
;
$sum_min
=
array_sum
(
$min
)
;
$sum_sec
=
array_sum
(
$sec
)
;
// Если минут или секунд больше 60, то переводим их в часы или минуты
if
(
$sum_min
>=
60
)
{
$sum_hours
+
=
intval
(
$sum_min
/
60
)
;
$sum_min
=
$sum_min
%
60
;
}
if
(
$sum_sec
>=
60
)
{
$sum_min
+
=
intval
(
$sum_sec
/
60
)
;
$sum_sec
=
$sum_sec
%
60
;
}
// Выведем на экран полученные значения
echo
$sum_hours
.
' часов, '
.
$sum_min
.
' минут, '
.
$sum_sec
.
' секунд.'
;
}
Для демонстрации работы кода я использовал те значения, которые указаны в твоем вопросе. Вот результат:
