Как отформатировать секунды во времени без отображения ненужных нулей

#php #laravel #php-carbon

#php #laravel #php-carbon

Вопрос:

У меня есть секунды, и я хочу преобразовать их следующим образом: 0:14 , 1:25 1:10:45 без начальных нулей. Я уже пробовал с gmdate , но в нем есть начальные нули.

Есть ли какой-либо способ сделать это с помощью Carbon или я должен создать пользовательскую функцию для этого?

Обновлено: Это мой текущий код:

 Carbon::now()->subSeconds($seconds)->diffForHumans(Carbon::now(), true, true);
  

И количество секунд является целым числом и может быть даже большим 2000 или больше..
Это отображается как 14s , 25m и я хочу быть 0:14 , 25:27 — чтобы показывать секунды тоже.

Комментарии:

1. Итак, вы хотите :14 или 14 или что? Только в одном из трех примеров есть начальные нули

2. Я хочу, 0:14 но не хочу 00:00:14 , поскольку он использует gmdate

3. Не могли бы вы, пожалуйста, показать свой текущий код и начальную строку (например, 00:00:14 = start и 0:14 должны быть выходные данные)?

4. Ну, я не нашел решения проблемы. У меня есть $seconds = 40; // data from the database и я хочу их отформатировать

5. Насколько большим может быть $seconds ? В настоящее время вы расширяете его до минут, часов, дней и т.д.?

Ответ №1:

Вы можете написать пользовательскую функцию, подобную этой:

 public function customDiffInHuman($date1, $date2)
{
    $diff_in_humans = '';
    $diff = 0;
    if($hours = $date1->diffInHours($date2, null)){
        $diff_in_humans .= $hours;
        $diff = $hours * 60;
    }

    $minutes = $date1->diffInMinutes($date2, null);
    $aux_minutes = $minutes;
    if($hours)
        $minutes -= $diff;
    $diff = $aux_minutes * 60;

    $diff_in_humans .= ($diff_in_humans) ? ':'.str_pad($minutes, 2, 0, STR_PAD_LEFT) : $minutes;


    if($seconds = $date1->diffInSeconds($date2, null)){
        if($diff)
            $seconds -= $diff;
        $diff_in_humans .=  ':'.str_pad($seconds, 2, 0, STR_PAD_LEFT);
    }
    return $diff_in_humans;
}
  

Если вы поместите эту функцию в один из ваших классов или в вспомогательный модуль и вызовете ее, например:

 $date1 = CarbonCarbon::now()->subSeconds(14);
$date2 = CarbonCarbon::now();    
echo $your_class->customDiffInHuman($date1, $date2); // This will output 00:14

$date1 = CarbonCarbon::now()->subSeconds(125);
$date2 = CarbonCarbon::now();    
echo $your_class->customDiffInHuman($date1, $date2); // This will output 2:05

$date1 = CarbonCarbon::now()->subSeconds(3725);
$date2 = CarbonCarbon::now();    
echo $your_class->customDiffInHuman($date1, $date2); // This will output 1:02:05
  

Комментарии:

1. Я попробую. Как насчет использования Carbon ? Я не смог найти способ сделать это с помощью Carbon