NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Opening Hours for Laravel

Dotazovanie otváracích hodín

OpeningHours::for($owner) — alebo openingHours() na vlastníkovi — vráti nemenný dotazovací objekt pre predvolený (alebo pomenovaný) kalendár. Vstupné okamihy prijímajú akýkoľvek DateTimeInterface; každý vrátený okamih je CarbonImmutable v časovom pásme kalendára:

use Carbon\CarbonImmutable;
use RoundlyConsulting\OpeningHours\Facades\OpeningHours;

$hours = OpeningHours::for($clinic);                      // default calendar — or $clinic->openingHours()
$hours->isOpen();                                         // now
$hours->isOpenAt(CarbonImmutable::parse('2026-10-25 02:30', 'Europe/Bratislava'));
$hours->nextOpen();                                       // ?CarbonImmutable, calendar timezone
$hours->nextClose();
$hours->previousOpen();
$hours->previousClose();
$hours->currentPeriod();                                  // ?OpeningPeriod (coalesced run)
$hours->currentRange();                                   // ?TimeRange as defined (label, capacity)
$hours->nextPeriod();
$hours->withOutputTimezone('UTC')->nextClose();           // same answer, reported in UTC
OpeningHours::for($clinic, 'pickup')->isOpenDuring($from, $to);

Pravidlá navigácie

  • Navigácia je striktná: nextOpen($t) je po $t, previousOpen($t) pred ním.
  • Navigácia prezerá search_days miestnych dní po (alebo pred) dni $t — per volanie to zmeníte parametrom searchDays:; ak sa tam nič nenájde, vráti null (nextOpen($monday, searchDays: 1) vidí pondelok aj utorok). Obdobie, ktoré sa otvorí v tomto okne, stále hlási svoj skutočný nextClose(), aj za polnocou. Kalendár otvorený nonstop nemá nextClose().
  • Obdobia sú polootvorené: v začiatku otvorené, v konci zatvorené.
  • Nadväzujúce rozsahy (09–12 + 12–13) sa pri navigácii rátajú ako jedno obdobie, rovnako pondelok 22:00–24:00 a utorok 00:00–06:00.
  • currentPeriod() vráti zlúčený úsek ako OpeningPeriod (start, end, label, source, capacity); currentRange() vráti rozsah tak, ako je definovaný, vrátane popisu a kapacity.

Ďalšie kontroly

$hours->isClosed();                 // now
$hours->isClosedAt($at);
$hours->nextOpen($after, searchDays: 30);   // override search_days per call
$hours->nextOpen($monday, searchDays: 1);   // sees Monday and Tuesday
$hours->isAlwaysOpen();
$hours->isAlwaysClosed();
$hours->timezone();                 // DateTimeZone the calendar is evaluated in
$hours->revision();                 // ?int — null for in-memory calendars
$hours->definition();               // CalendarData

$period = $hours->currentPeriod();  // ?OpeningPeriod
$period?->start;                    // CarbonImmutable
$period?->end;
$period?->label;

„Teraz“ pochádza z fasády Date v Laraveli, takže v testoch fungujú Carbon::setTestNow() aj travelTo().

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.