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

Ниже я пытаюсь сгенерировать массив дат, которые соответствуют критериям воскресенья, понедельника и четверга, начиная с 1990 года. С этими датами я хочу добавить время 19 часов для каждого создаваемого события.Возможно ли это с пакетом Carbon?

public function run()
{
    $start = Carbon::parse('First Monday of January 1990');
    $nextMonth = Carbon::now()->addMonth();

    collect([
        'monday' => false,
        'thursday' => false,
        'sunday' => true
    ])->flatMap(function ($bool, $day) use ($start, $nextMonth) {
        return $this->dates($start, $nextMonth, $day, $bool);
    })->sort(function ($a, $b) {
        return strtotime($a) - strtotime($b);
    })->values()->map(function ($date, $key) {
        return factory(Event::class)->create([
            'name' => 'Event '.($key + 1),
            'slug' => 'event'.($key + 1),
            'venue_id' => Venue::inRandomOrder()->first()->id,
            'date' => $date
        ]);
    })->filter(function ($event) {
        return $event->date->lte(Carbon::today()->addWeeks(2));
    });
}

protected function dates(Carbon $from, Carbon $to, $day, $last = false)
{
    $step = $from->copy()->startOfMonth();
    $modification = sprintf($last ? 'last %s of next month' : 'next %s', $day);

    $dates = [];
    while ($step->modify($modification)->lte($to)) {
        $dates[$step->timestamp] = $step->copy();
    }

    return $dates;
}

1 Ответ

0 голосов
/ 28 мая 2018

Для добавления времени в 19:00 вы можете использовать метод установки углерода $date->hour = 19.Смотри http://carbon.nesbot.com/docs/#api-setters

...