#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