Dni, týždne a štruktúrované dáta
Pohľady na deň a týždeň pracujú s miestnym časom: zobrazujú rozsahy tak, ako sú definované, a pri konkrétnom dátume uplatnia výnimky:
use RoundlyConsulting\OpeningHours\Enums\Weekday;
$hours->forDate('2026-12-24')->toString(); // "Closed" or "09:00–12:00" (translated)
$hours->forDate('2026-12-24')->ranges; // list<TimeRange>
$hours->forDate('2026-12-24')->source; // DaySource::Schedule|Exception|Dynamic|None
$hours->isOpenOnDate('2026-12-24');
$hours->isOpenOn('monday'); // regular schedule, exceptions ignored
$hours->forWeekday(Weekday::Monday);
$hours->forWeek()->grouped(); // list<WeekdayGroup>: Mon–Fri · Sat · Sun, each with its hours
$hours->forWeek()->keyed(); // ['monday' => DayHours, …]
$hours->forWeekOf('2026-09-30'); // the seven actual dates, exceptions applied
$hours->forPeriod('2026-12-20', '2026-12-31');
$hours->regularClosingDays(); // list<Weekday>
$hours->toStructuredData()->toJson(); // schema.org OpeningHoursSpecificationisOpenOnDate() overí, či v daný dátum začína nejaký rozsah; isOpenOn() a forWeekday() čítajú bežný rozvrh a výnimky ignorujú. DateTimeInterface zadaný namiesto dátumu sa najprv prevedie do pásma kalendára.
Vykreslenie dní a skupín
DayHours::toString(rangeSeparator, timeSeparator, locale, closedText) vykreslí deň. Bez closedText sa zatvorený deň zobrazí ako preložené „Zatvorené“ a jediný celodenný rozsah ako „Otvorené nonstop“; akékoľvek explicitné closedText — aj '' — dá doslovný výstup. forWeek()->grouped() zlúči rovnaké po sebe idúce dni do skupín (grouped(false) zlúči aj tie, ktoré po sebe nejdú), každú s preloženým label(), napríklad Po–Pi:
$day = $hours->forDate('2026-12-24');
$day->toString(); // "09:00–12:00, 13:00–18:00", or the translated "Closed"
$day->toString(',', '-', closedText: ''); // "09:00-12:00,13:00-18:00" — literal, '' when closed
$day->toString(locale: 'sk');
$day->isOpenAllDay();
$day->totalMinutes();
$day->label; // an exception's label, e.g. "Christmas"
foreach ($hours->forWeek()->grouped() as $group) {
echo $group->label().' '.$group->hoursText(); // "Mon–Fri 08:00–17:00"
}Štruktúrované dáta
toStructuredData() vytvorí položky OpeningHoursSpecification pre JSON-LD podľa schema.org. 24:00 sa zmení na 23:59, nočné rozsahy ostanú ako opens 22:00 / closes 02:00, sezónny rozvrh pridá validFrom a validThrough a jednorazové výnimky v rámci api.upcoming_exceptions_days pridajú datované položky (zatvorené dni otvárajú aj zatvárajú o 00:00):
$hours->toStructuredData()->toJson();
// [{"@type":"OpeningHoursSpecification","dayOfWeek":"https://schema.org/Monday","opens":"09:00","closes":"17:00"}, …]
$jsonLd = [
'@context' => 'https://schema.org',
'@type' => 'MedicalClinic',
'name' => $clinic->name,
'openingHoursSpecification' => $hours->toStructuredData()->toArray(),
];Enum Weekday
Weekday je enum s reťazcovými hodnotami a pomocníkmi na parsovanie, poradie a preklad, plus pomocníkmi z enums-for-laravel, napríklad toOptions() pre výberové polia:
use RoundlyConsulting\OpeningHours\Enums\Weekday;
Weekday::fromKey('Mon'); // Weekday::Monday
Weekday::ordered(Weekday::Sunday); // [Sunday, Monday, …, Saturday]
Weekday::Friday->translated('sk'); // localized long name
Weekday::Friday->translated(short: true);
Weekday::Saturday->isWeekend(); // true
Weekday::toOptions(); // value => label map for select inputsPreklady
Názvy dní (dlhé aj krátke), „Zatvorené“, „Otvorené nonstop“, dôvody nedostupnosti a všetky validačné správy sú k dispozícii v angličtine a slovenčine v namespace opening-hours. Ak ich chcete upraviť alebo pridať jazyk, publikujte ich tagom opening-hours-translations.
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 kryptomienOdoslaní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.