Laravel, Faker – Увеличивает сгенерированную датуВремя

Я использую пакет Faker в своем Seeder для создания поддельных данных для учебных мероприятий.

Каждое событие имеет starts_at и ends_at . Я хочу заполнить поле ends_at с помощью DateTime которое будет после того, как оно было сгенерировано для starts_at , предпочтительно от 1 до 8 часов или даже с фиксированной разницей в 1 час.

Solutions Collecting From Web of "Laravel, Faker – Увеличивает сгенерированную датуВремя"

вот простой способ определить end_at

 $starts_at = Carbon::createFromTimestamp($faker->dateTimeBetween($startDate = '+2 days', $endDate = '+1 week')->getTimeStamp()) ; $ends_at= Carbon::createFromFormat('Ymd H:i:s', $starts_at)->addHours( $faker->numberBetween( 1, 8 ) ); 

Адаптируя шаблон, описанный в Build API, вы не будете ненавидеть и использовать потрясающий пакет Carbon , вот как вы можете это сделать:

 <?php use Carbon\Carbon; use Faker\Factory as Faker; class UserEventsTableSeeder extends Seeder { public function run() { $faker = Faker::create(); foreach (range(1, 15) as $index) { $startDate = Carbon::createFromTimeStamp($faker->dateTimeBetween('-1 years', '+1 month')->getTimestamp()); UserEvent::create([ // ... 'starts_at' => $startDate->toDateTimeString(), 'ends_at' => $startDate->addHours( $faker->numberBetween( 1, 8 ) ) ]); } } }