длительность — функция PHP для преобразования секунд в годы, месяцы, дни, часы, минуты и секунды

Я не очень разбираюсь в этом, но мне нужна была функция, которая конвертирует секунды в 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 секунд

0

Решение

Я понимаю, что вы хотите показывать только те значения, которые не равны нулю.

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

Вы можете поместить эти значения в массив и объединить их, но вам нужно знать, что представляет каждое значение, поэтому вам нужна некоторая форма метки (годы, месяцы и т. Д.).

Вам также нужно будет удалить 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
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]