Углерод преобразует количество дней в читаемый человеком формат - PullRequest
0 голосов
/ 09 ноября 2018

Мне нужно конвертировать 30 дней в 1 месяц. Если месяцы и дни - это значит, то 1 год 2 месяца 2 дня Я пробовал ниже, но он вернет неправильный результат

 echo CarbonInterval::days(30)->cascade()->forHumans();

Может ли кто-нибудь помочь мне, как мне этого добиться?

Я пробовал приведенное ниже решение, но получил разницу только 2 дня

$convert = '30'; // days you want to convert

    $years = ($convert / 365) ; // days / 365 days
    $years = floor($years); // Remove all decimals

    $month = ($convert % 365) / 30.5; // I choose 30.5 for Month (30,31) ;)
    $month = floor($month); // Remove all decimals

    $days = ($convert % 365) % 30.5; // the rest of days

    // Echo all information set
    echo 'DAYS RECEIVE : '.$convert.' days<br>';
    echo $years.' years - '.$month.' month - '.$days.' days';

Есть ли какое-нибудь хорошее решение с использованием углерода

1 Ответ

0 голосов
/ 09 ноября 2018

Это должен быть CarbonInterval?

А как же Carbon::now()->subDays(1827)->diffForHumans()?

Причина, по которой это не работает, как вы ожидаете (от https://carbon.nesbot.com/docs/#api-interval):

Коэффициенты по умолчанию:

  • 1 минута = 60 секунд
  • 1 час = 60 минут
  • 1 день = 24 часа
  • 1 неделя = 7 дней
  • 1 месяц = ​​4 недели
  • 1 год = 12 месяцев

CarbonIntervals не несут контекста, поэтому они не могут быть более точными (без DST, без високосного года, без реальной длины месяца или длины года рассмотрение).

...