PHP函数将秒转换为年,月,日,小时,分钟和秒

时间:2018-03-15 18:48:27

标签: php duration period seconds

我不是很了解这个,但我需要一个将秒转换为y,m,d,h的函数

function convertSecToTime($sec) 
 {
  $date1 = new DateTime("@0");
  $date2 = new DateTime("@$sec");
  $interval =  date_diff($date1, $date2);
  return $interval->format('%y Years, %m months, %d days, %h hours, %i minutes and %s seconds');
  // convert into Days, Hours, Minutes
  // return $interval->format('%a days, %h hours, %i minutes and %s seconds'); 
  }

print_r(convertSecToTime(500));

它会给出的输出是

0 Years, 0 months, 0 days, 0 hours, 8 minutes and 20 seconds

有人可以帮我修改这个功能,所以它不显示所有的0值,只显示8分钟和20秒

1 个答案:

答案 0 :(得分:3)

我知道您希望仅显示非零值。

这需要一些工作。您需要从间隔中获取单个值,并查看它们是否为零,并且仅获取不是的值。

您可以将这些值放在数组上并加入它们,但您需要知道每个值代表什么,因此您需要某种形式的标签(年,月等)。

如果值为s,您还需要从标签中删除1,这很简单:您只需要检查值是否为1并获取标签的子字符串没有最后一个字符(substr($str, 0, -1))。

然后你可以用逗号加入这些值,但是你不会在最后一个索引中有“和”部分,所以你必须检查数组中是否有多个项并加入最后一个项用“和”字符串。

这是最终结果:

<?php

function convertSecToTime($sec)
{
    $date1 = new DateTime("@0");
    $date2 = new DateTime("@$sec");
    $interval = date_diff($date1, $date2);
    $parts = ['years' => 'y', 'months' => 'm', 'days' => 'd', 'hours' => 'h', 'minutes' => 'i', 'seconds' => 's'];
    $formatted = [];
    foreach($parts as $i => $part)
    {
        $value = $interval->$part;
        if ($value !== 0)
        {
            if ($value == 1){
                $i = substr($i, 0, -1);
            }
            $formatted[] = "$value $i";
        }
    }

    if (count($formatted) == 1)
    {
        return $formatted[0];
    }
    else
    {
        $str = implode(', ', array_slice($formatted, 0, -1));
        $str.= ' and ' . $formatted[count($formatted) - 1];
        return $str;
    }
}

echo convertSecToTime(500); //8 minutes and 20 seconds
echo convertSecToTime(1500); //25 minutes
echo convertSecToTime(2500); //41 minutes and 40 seconds
echo convertSecToTime(3500); //58 minutes and 20 seconds
echo convertSecToTime(4500); //1 hour and 15 minutes
echo convertSecToTime(5500); //1 hour, 31 minutes and 40 seconds