Как добавить экземпляр CarbonInterval в экземпляр Carbon - PullRequest
0 голосов
/ 11 июня 2018

У меня есть экземпляр углерода

   $a = Carbon\Carbon::now();

   Carbon\Carbon {
     "date": "2018-06-11 10:00:00",
     "timezone_type": 3,
     "timezone": "Europe/Vienna",
   }

и экземпляр CarbonInterval

   $b = CarbonInterval::make('1month');


     Carbon\CarbonInterval {
     "y": 0,
     "m": 1,
     "d": 0,
     "h": 0,
     "i": 0,
     "s": 0,
     "f": 0.0,
     "weekday": 0,
     "weekday_behavior": 0,
     "first_last_day_of": 0,
     "invert": 0,
     "days": false,
     "special_type": 0,
     "special_amount": 0,
     "have_weekday_relative": 0,
     "have_special_relative": 0,
   }

Как добавить интервал в экземпляре углерода, чтобы получить

   Carbon\Carbon {
     "date": "2018-07-11 10:00:00",
     "timezone_type": 3,
     "timezone": "Europe/Vienna",
   }

Мне известно о решении, которое включает преобразование его в метку времени или класс Datetime, например,

strtotime( date('Y-m-d H:i:s', strtotime("+1 month", $a->timestamp ) ) );  

, которое в настоящее время я использую, но я ищу более «странный» способ поиска в официальный сайт , но ничего не могу найти по этому вопросу, поэтому нужна помощь.

Обновление: просто чтобы дать вам контекст В веб-интерфейсе у меня есть два элемента управления, 1-й для интервала (дни, месяцы,year) 2nd является текстовым полем, поэтому в зависимости от комбинации я генерирую строки динамически, такие как "2 days", "3 months", и так далее, затем получает фид для интервальных классов

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Мне не известна встроенная функция для добавления интервала, но что должно работать, так это добавление общего количества секунд интервала к дате:

$date = Carbon::now(); // 2018-06-11 17:54:34
$interval = CarbonInterval::make('1hour');

$laterThisDay = $date->addSeconds($interval->totalSeconds); // 2018-06-11 18:54:34

Изменить: Найден более простой способ!

$date = Carbon::now(); // 2018-06-11 17:54:34
$interval = CarbonInterval::make('1hour');

$laterThisDay = $date->add($interval); // 2018-06-11 18:54:34

Это работает, потому что Carbon основан на DateTime, а CarbonInterval основан на DateInterval.См. здесь для ссылки на метод.

0 голосов
/ 11 июня 2018

См. Документацию https://carbon.nesbot.com/docs/#api-addsub

$carbon = Carbon\Carbon::now();
$monthLater = clone $carbon;
$monthLater->addMonth(1);
dd($carbon, $monthLater);

результат равен

Carbon {#416 ▼
  +"date": "2018-06-11 16:00:48.127648"
  +"timezone_type": 3
  +"timezone": "UTC"
}

Carbon {#418 ▼
  +"date": "2018-07-11 16:00:48.127648"
  +"timezone_type": 3
  +"timezone": "UTC"
}

Для этого интервала [месяцы, века, годы, кварталы, дни, дни недели, недели, часы, минуты,секунд], введите вы можете использовать

$count = 1; // for example
$intrvalType = 'months'; // for example
$addInterval = 'add' . ucfirst($intrvalType);
$subInterval = 'sub' . ucfirst($intrvalType);
$carbon = Carbon\Carbon::now();
dd($carbon->{$addInterval}($count));
dd($carbon->{$subInterval}($count));
...