преобразование H:i:s только в минуты, но array_map() дает ошибки

Я пытаюсь преобразовать длинные данные типа данных во время, в котором я успешен. В каждом массиве времени сеанса у меня есть такие значения, как ["1276999","787878","677267"]. Я передал этот массив в функцию array_map и преобразовал во время, которое работает.

Теперь в функции convert_time я вызываю другую функцию, используя array_map, которая будет преобразовываться каждый раз (i.e 1:40:00 to 100 minutes), но проблема заключается в моей второй функции карты массива, которая дает мне ошибку, что array_map требует, чтобы 2-й параметр был массивом...

$each_session_time = array();

for ($i=0; $i<sizeof($array_in_time_str) ; $i++) { 
   $each_session_time[$i]=$array_out_time_str[$i]-$array_in_time_str[$i];
}

//session time in hours
array_map("convert_to_time", $each_session_time);

function convert_to_time($each_session) {
   # code...
   $each_sess_time=array();
   $each_sess_time=date("H:i:s",$each_session);
   array_map("get_minutes",$each_sess_time);
   return $each_sess_time;
}

function get_minutes($session_time) {
   // algorithm to convert each session time to minutes)
 }

person iqra    schedule 24.08.2016    source источник
comment
похоже, вам не нужно array_map, так как вы заинтересованы в одновременном преобразовании только одного значения. Позвоните get_minutes($each_sess_time) напрямую   -  person Alex Tartan    schedule 24.08.2016
comment
array_map("get_minutes",$each_sess_time) Здесь $each_sess_time — одно значение. Зачем вы используете array_map здесь?   -  person u_mulder    schedule 24.08.2016


Ответы (3)


Вам нужно убрать array_map("get_minutes",$each_session_time); из функции convert_to_time.

пример:

<?php
$each_session_time=["1276999","787878","677267"];

//session time in hours
$times = array_map("convert_to_time", $each_session_time);
$minutes = array_map("get_minutes",$times);

function convert_to_time($each_session)
{
    # code...
    $each_sess_time=array();
    $each_sess_time=date("H:i:s",$each_session);

    return $each_sess_time;
}

function get_minutes($session_time)
{
    //algo to convert each session time to minutes)
}

print_r($minutes);
person HTMHell    schedule 24.08.2016

Кажется, вы начинаете с действительных временных меток — секунд, прошедших с 1 января 1970 года — поэтому, чтобы получить разницу между двумя значениями в минутах, вам просто нужно вычесть одно из другого и умножить на 60.

Если вам нужен больший контроль над вашими данными, например, чтобы позже отформатировать их по-другому, я бы рекомендовал использовать DateInterval объекты вместо разницы между двумя временными метками и строками, которые вы используете сейчас. Обратите внимание, что разница между двумя временными метками сама по себе не является действительной временной меткой, поэтому вы не можете использовать date() для ее форматирования.

person jeroen    schedule 24.08.2016
comment
@jeron я знаю, пожалуйста, помогите мне улучшить код, так как я новичок в разработке php - person iqra; 24.08.2016
comment
@iqra не совсем понятно, чего вы хотите, вы ничего не делаете с результатом своих вызовов функций. Каков ваш вклад и что вы хотите на выходе? - person jeroen; 24.08.2016
comment
хорошо @jeoren позвольте мне уточнить, чего я пытаюсь добиться для вас - person iqra; 24.08.2016
comment
@iqra У вас еще нет ответа, который вы искали? Вы отметили один как принятый... - person jeroen; 24.08.2016
comment
@jeoren Я создаю систему посещаемости сотрудников, которая будет вести учет рабочего времени сотрудников в офисе в моей таблице mysql. У меня есть таблица employee_timings, из которой я извлекаю значения emp_in_time и emp_out_time, например, сотрудник входит в офис в 11:00: 00:00 и уходит в 13:00, затем в тот же день он снова приходит в офис в 15:00:00 и уходит в 18:00:00 я подсчитываю общее время каждой сессии, например, что он провел 3 часа в первом сеансе и 4 часа во втором соответственно.. - person iqra; 24.08.2016
comment
@jeoren, тогда я вычисляю совокупное время всего сеанса по этой конкретной дате этого конкретного сотрудника ... - person iqra; 24.08.2016
comment
@jeoren теперь вопрос в том, почему я хочу конвертировать время только в минуты, например, с 1:50:00 до 110 минут, потому что я показываю свой результат на гистограмме, время которой начинается с 09:00:00 и заканчивается в 18:00. 00:00 по оси y и по оси x минуты начинаются с 0 10 20 30 40 50 60 - person iqra; 24.08.2016
comment
@jeoren теперь, после преобразования 1:50:00 в 110 минут, разделит эти минуты на 60 60 50, а затем передаст эти значения в данные гистограммы относительно соответствующих временных интервалов. - person iqra; 24.08.2016
comment
@jeoren да, я получил ответ, но так как я не получаю правильное время по отметкам времени, и вы тоже указали на это, поэтому я подумал о том, чтобы получить вашу помощь. Спасибо. - person iqra; 24.08.2016

учитывая, что вы работаете со строками типа «XX: YY: ZZ», вы можете попробовать

$split = explode(":",$session_time); $minutes = $split[1];

чтобы получить "i" часть строки.

Вы также можете использовать объект dateTime (http://php.net/manual/en/class.datetime.php), выполнив new DateTime($each_session); в первом цикле и используя DateTime::format("H:i:s") и DateTime::format("i") для этого объекта в зависимости от того, какие данные вам нужны

person Bartłomiej Wach    schedule 24.08.2016