将H:i:s转换为仅分钟,但array_map()给出错误

时间:2016-08-24 07:25:12

标签: php array-map

我正在尝试将长数据类型数据转换为成功的时间。 在每个会话时间数组中,我有["1276999","787878","677267"]之类的值。我在array_map函数中传递了这个数组并转换为正在工作的时间。

现在在convert_time函数中我调用另一个函数,使用array_map每次都会转换(i.e 1:40:00 to 100 minutes),但问题是我的第二个数组映射函数给了我array_map需要第二个参数为数组的错误...

$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)
 }

3 个答案:

答案 0 :(得分:1)

似乎你开始使用有效的时间戳 - 自1970年1月1日以来经过的秒数 - 所以要在几分钟内得到两个值之间的差异,你只需要从另一个中减去一个并将它乘以60.

如果您想要更好地控制数据,例如稍后对其进行不同的格式化,我建议使用DateInterval个对象,而不是现在使用的两个时间戳和字符串之间的差异。请注意,两个时间戳之间的差异不是有效的时间戳,因此您无法使用date()对其进行格式化。

答案 1 :(得分:1)

您需要从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);

答案 2 :(得分:1)

考虑到你正在处理类似&#34; XX:YY:ZZ&#34;你可以尝试

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

获得&#34; i&#34;字符串的一部分。

你也可以在第一个循环中使用new DateTime($each_session);并在该对象上使用DateTime::format("H:i:s")DateTime::format("i")来使用dateTime对象(http://php.net/manual/en/class.datetime.php),具体取决于你需要的数据