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

converting H:i:s to minutes only but array_map() giving errors

我正在尝试将长数据类型数据转换为我成功的时间。 在每个会话时间数组中,我都有 ["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)
 }

您似乎从有效的时间戳开始 - 自 1970 年 1 月 1 日以来经过的秒数 - 所以要以分钟为单位计算两个值之间的差异,您只需将一个值减去另一个值并将其乘以 60。

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

您需要从 convert_to_time 函数中移出 array_map("get_minutes",$each_session_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);

考虑到您正在使用像 "XX:YY:ZZ" 这样的字符串,您可以尝试

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

获取字符串的 "i" 部分。

您还可以通过在第一个循环中执行 new DateTime($each_session); 并根据数据对该对象使用 DateTime::format("H:i:s")DateTime::format("i") 来使用 dateTime 对象 (http://php.net/manual/en/class.datetime.php)你需要