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

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 OpeningHoursSpecification

isOpenOnDate() 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 inputs

Preklady

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 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.