Aller au contenu

Texte, schema.org et stockage

phil/opening-hours

La forme texte

HoursText::day() lit un jour, ses plages séparées par des virgules, rien pour fermé. HoursText::specials() lit des heures spéciales, une période par ligne — un jour ou from..through, ses plages et un libellé après # —, et specialsToText() les réécrit :

2026-12-24 09:00-12:00 # Christmas Eve
2026-12-25 # Christmas
2027-07-01..2027-08-31 10:00-16:00

Les lignes vides sont ignorées ; une ligne qui ne correspond à aucune de ces formes lance InvalidOpeningHours.

schema.org

OpeningHoursSchema::of($hours) donne l'openingHoursSpecification d'un lieu :

[
    ['@type' => 'OpeningHoursSpecification', 'dayOfWeek' => ['https://schema.org/Monday', 'https://schema.org/Tuesday'], 'opens' => '09:00', 'closes' => '17:00'],
    ['@type' => 'OpeningHoursSpecification', 'opens' => '00:00', 'closes' => '00:00', 'validFrom' => '2026-12-25', 'validThrough' => '2026-12-25'],
]

Une plage de la semaine donne une spécification pour les jours qui la partagent. Chaque plage d'heures spéciales en donne une avec sa période, et les heures spéciales qui ferment le lieu ouvrent et ferment à 00:00, comme les moteurs de recherche le lisent.

Stockage

OpeningHoursArray::from() écrit les heures sous forme de tableau de textes et to() les relit. C'est ce que le type de colonne de phil/opening-hours-bundle stocke en JSON :

{"timezone": "America/Toronto",
 "week": {"1": "09:00-17:00", "6": "10:00-16:00"},
 "specials": [{"from": "2026-12-25", "through": "2026-12-25", "hours": "", "label": "Christmas"}]}

Les jours fermés sont omis de week. Tout ce qui diffère de ce qu'écrit from() lance UnreadableOpeningHours.