CSS HTML Подсчет в textarea

Morse

Потрачен
Автор темы
437
70
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как из этого текста в textarea посчитать часы

1629380850022.png
 

Hatrig

Известный
38
43
Привет.

В своём ответе я покажу реализацию твоей задачи на PHP, и постараюсь объяснить подробнее каждый шаг.
Для теста я сделал простую форму с textarea, которая отдает данные на PHP через POST:

Форма с textarea:
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Blasthack - answer by USEC</title>
</head>
<body>
  <form class="" action="/test.php" method="post">
    <textarea name="dates" rows="8" cols="80"></textarea>
    <button type="submit" name="button">Go</button>
  </form>
</body>
</html>

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

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.' секунд.';
}

Для демонстрации работы кода я использовал те значения, которые указаны в твоем вопросе. Вот результат:

Video_2021-08-22_103340.gif
 
  • Нравится
Реакции: Morse и shinoa

xorl

Участник
21
5
Привет.

В своём ответе я покажу реализацию твоей задачи на PHP, и постараюсь объяснить подробнее каждый шаг.
Для теста я сделал простую форму с textarea, которая отдает данные на PHP через POST:

Форма с textarea:
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Blasthack - answer by USEC</title>
</head>
<body>
  <form class="" action="/test.php" method="post">
    <textarea name="dates" rows="8" cols="80"></textarea>
    <button type="submit" name="button">Go</button>
  </form>
</body>
</html>

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

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.' секунд.';
}

Для демонстрации работы кода я использовал те значения, которые указаны в твоем вопросе. Вот результат:

Посмотреть вложение 111271
пезда

PHP:
$stack = '2021-08-19 (04:16:12)
2021-08-18 (02:57:07)';
$seconds = 0;
preg_replace_callback('#\((\d{2}):(\d{2}):(\d{2})\)#', function($matches) {
  $GLOBALS['seconds'] += mktime($matches[1], $matches[2], $matches[3]);
}, $stack);
echo date('g', $seconds);
 
  • Нравится
Реакции: Hatrig

Hatrig

Известный
38
43
пезда

PHP:
$stack = '2021-08-19 (04:16:12)
2021-08-18 (02:57:07)';
$seconds = 0;
preg_replace_callback('#\((\d{2}):(\d{2}):(\d{2})\)#', function($matches) {
  $GLOBALS['seconds'] += mktime($matches[1], $matches[2], $matches[3]);
}, $stack);
echo date('g', $seconds);

Вывод не корректный, но использование регулярки мне нравится, хоть я их и не люблю.