С помощью spatie/opening-hours вы создаете объект, описывающий часы работы предприятия, который вы можете запросить об open или closed в определенные дни или определенные даты или использовать для представления времени в день.
spatie/opening-hours можно использовать непосредственно в Carbon благодаря cmixin/business-time, так что вы можете использовать функции часов работы непосредственно в своих расширенных объектах даты.
Набор часов работы создается путем передачи регулярного расписания и списка исключений.
// Add the use at the top of each file where you want to use the OpeningHours class:
use Spatie OpeningHours OpeningHours ;
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' tuesday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' wednesday ' => [ ' 09:00-12:00 ' ],
' thursday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' friday ' => [ ' 09:00-12:00 ' , ' 13:00-20:00 ' ],
' saturday ' => [ ' 09:00-12:00 ' , ' 13:00-16:00 ' ],
' sunday ' => [],
' exceptions ' => [
' 2016-11-11 ' => [ ' 09:00-12:00 ' ],
' 2016-12-25 ' => [],
' 01-01 ' => [], // Recurring on each 1st of January
' 12-25 ' => [ ' 09:00-12:00 ' ], // Recurring on each 25th of December
],
]);
// This will allow you to display things like:
$ now = new DateTime ( ' now ' );
$ range = $ openingHours -> currentOpenRange ( $ now );
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed since " . $ openingHours -> previousClose ( $ now )-> format ( ' l H:i ' ). "n" ;
echo " It will re-open at " . $ openingHours -> nextOpen ( $ now )-> format ( ' l H:i ' ). "n" ;
}К объекту можно запросить день недели, который вернет результат на основе обычного расписания:
// Open on Mondays:
$ openingHours -> isOpenOn ( ' monday ' ); // true
// Closed on Sundays:
$ openingHours -> isOpenOn ( ' sunday ' ); // falseЕго также можно запросить для конкретной даты и времени:
// Closed because it's after hours:
$ openingHours -> isOpenAt ( new DateTime ( ' 2016-09-26 19:00:00 ' )); // false
// Closed because Christmas was set as an exception
$ openingHours -> isOpenOn ( ' 2016-12-25 ' ); // falseОн также может возвращать массивы часов работы за неделю или день:
// OpeningHoursForDay object for the regular schedule
$ openingHours -> forDay ( ' monday ' );
// OpeningHoursForDay[] for the regular schedule, keyed by day name
$ openingHours -> forWeek ();
// Array of day with same schedule for the regular schedule, keyed by day name, days combined by working hours
$ openingHours -> forWeekCombined ();
// OpeningHoursForDay object for a specific day
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));
// OpeningHoursForDay[] of all exceptions, keyed by date
$ openingHours -> exceptions ();При построении вы можете установить флаг превышения времени в днях. Например, ночной клуб работает до 3 часов ночи в пятницу и субботу:
$ openingHours = Spatie OpeningHours OpeningHours:: create ([
' overflow ' => true ,
' friday ' => [ ' 20:00-03:00 ' ],
' saturday ' => [ ' 20:00-03:00 ' ],
], null );Это позволяет API дополнительно использовать данные за предыдущий день, чтобы проверить, открыты ли часы работы в соответствующем временном диапазоне.
Вы можете добавлять данные в определения, а затем получать их:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' data ' => ' Typical Monday ' ,
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' tuesday ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
[
' 19:00-21:00 ' ,
' data ' => ' Extra on Tuesday evening ' ,
],
],
' exceptions ' => [
' 2016-12-25 ' => [
' data ' => ' Closed for Christmas ' ,
],
],
]);
echo $ openingHours -> forDay ( ' monday ' )-> data ; // Typical Monday
echo $ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ))-> data ; // Closed for Christmas
echo $ openingHours -> forDay ( ' tuesday ' )[ 2 ]-> data ; // Extra on Tuesday eveningВ приведенном выше примере данные представляют собой строки, но это может быть любое значение. Таким образом, вы можете встроить несколько свойств в массив.
Для удобства структуры пара данные-часы может быть полностью ассоциативным массивом, поэтому приведенный выше пример строго эквивалентен следующему:
$ openingHours = OpeningHours:: create ([
' monday ' => [
' hours ' => [
' 09:00-12:00 ' ,
' 13:00-18:00 ' ,
],
' data ' => ' Typical Monday ' ,
],
' tuesday ' => [
[ ' hours ' => ' 09:00-12:00 ' ],
[ ' hours ' => ' 13:00-18:00 ' ],
[ ' hours ' => ' 19:00-21:00 ' , ' data ' => ' Extra on Tuesday evening ' ],
],
// Open by night from Wednesday 22h to Thursday 7h:
' wednesday ' => [ ' 22:00-24:00 ' ], // use the special "24:00" to reach midnight included
' thursday ' => [ ' 00:00-07:00 ' ],
' exceptions ' => [
' 2016-12-25 ' => [
' hours ' => [],
' data ' => ' Closed for Christmas ' ,
],
],
]); Вы можете использовать разделитель to указания нескольких дней одновременно, для недели или для исключений:
$ openingHours = OpeningHours:: create ([
' monday to friday ' => [ ' 09:00-19:00 ' ],
' saturday to sunday ' => [],
' exceptions ' => [
// Every year
' 12-24 to 12-26 ' => [
' hours ' => [],
' data ' => ' Holidays ' ,
],
// Only happening in 2024
' 2024-06-25 to 2024-07-01 ' => [
' hours ' => [],
' data ' => ' Closed for works ' ,
],
],
]);Последний инструмент структуры — это фильтр. Он позволяет передавать замыкания (или ссылку на вызываемую функцию/метод), которые принимают дату в качестве параметра и возвращают настройки для данной даты.
$ openingHours = OpeningHours:: create ([
' monday ' => [
' 09:00-12:00 ' ,
],
' filters ' => [
function ( $ date ) {
$ year = intval ( $ date -> format ( ' Y ' ));
$ easterMonday = new DateTimeImmutable ( ' 2018-03-21 + ' .( easter_days ( $ year ) + 1 ). ' days ' );
if ( $ date -> format ( ' m-d ' ) === $ easterMonday -> format ( ' m-d ' )) {
return []; // Closed on Easter Monday
// Any valid exception-array can be returned here (range of hours, with or without data)
}
// Else the filter does not apply to the given date
},
],
]); Если вызываемый объект найден в свойстве "exceptions" , он будет автоматически добавлен в фильтры, поэтому вы можете смешивать фильтры и исключения в массиве исключений . Первый фильтр, возвращающий ненулевое значение, будет иметь приоритет над следующими фильтрами, а массив фильтров имеет приоритет над фильтрами внутри массива исключений .
Предупреждение: мы будем циклически использовать все фильтры для каждой даты, из которой нам нужно получить часы работы, и не можем ни предикатировать, ни кэшировать результат (это может быть случайная функция), поэтому вы должны быть осторожны с фильтрами, слишком большим количеством фильтров или длительным процессом внутри фильтров. может оказать существенное влияние на производительность.
Он также может возвращать дату следующего открытия или закрытия DateTime из заданного DateTime .
// The next open datetime is tomorrow morning, because we’re closed on 25th of December.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-25 10:00:00 ' )); // 2016-12-26 09:00:00
// The next open datetime is this afternoon, after the lunch break.
$ nextOpen = $ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' )); // 2016-12-24 13:00:00
// The next close datetime is at noon.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 10:00:00 ' )); // 2016-12-24 12:00:00
// The next close datetime is tomorrow at noon, because we’re closed on 25th of December.
$ nextClose = $ openingHours -> nextClose ( new DateTime ( ' 2016-12-25 15:00:00 ' )); // 2016-12-26 12:00:00Прочтите раздел об использовании для получения полной версии API.
Spatie — агентство веб-дизайна, базирующееся в Антверпене, Бельгия. На нашем сайте вы найдете обзор всех наших проектов с открытым исходным кодом.
Мы вкладываем много ресурсов в создание лучших в своем классе пакетов с открытым исходным кодом. Вы можете поддержать нас, купив один из наших платных продуктов.
Мы очень признательны вам за отправку нам открытки из вашего родного города с указанием того, какой из наших пакетов вы используете. Наш адрес вы найдете на странице контактов. Все полученные открытки мы публикуем на нашей виртуальной стене открыток.
Вы можете установить пакет через композитор:
composer require spatie/opening-hours Пакет следует использовать только через класс OpeningHours . Также повсюду используются три класса объектов значений: Time , который представляет одно время, TimeRange , который представляет период с началом и концом, и openingHoursForDay , который представляет набор TimeRange , которые не могут перекрываться.
SpatieOpeningHoursOpeningHoursOpeningHours::create(array $data, $timezone = null, $toutputTimezone = null): SpatieOpeningHoursOpeningHoursСтатический фабричный метод для заполнения набора часов работы.
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]); Если часовой пояс не указан, OpeningHours просто предполагает, что вы всегда передаете объекты DateTime , часовой пояс которых уже соответствует вашему расписанию.
Если вы передадите $timezone в качестве второго аргумента или через ключ массива 'timezone' (это может быть либо объект DateTimeZone , либо string ), то переданные даты будут преобразованы в этот часовой пояс в начале каждого метода, тогда если метод возвращает объект даты (например, nextOpen , nextClose , previousOpen , previousClose , currentOpenRangeStart или currentOpenRangeEnd ), затем перед выводом он преобразуется обратно в исходный часовой пояс, поэтому объект может отражать момент по местному времени пользователя, в то время как OpeningHours может придерживаться своего собственного часового пояса.
В качестве альтернативы вы также можете указать как входной, так и выходной часовой пояс (используя второй и третий аргумент) или используя массив:
$ openingHours = OpeningHours:: create ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
' timezone ' => [
' input ' => ' America/New_York ' ,
' output ' => ' Europe/Oslo ' ,
],
]);OpeningHours::mergeOverlappingRanges(array $schedule) : array В целях безопасности создание объекта OpeningHours с перекрывающимися диапазонами вызовет исключение, если вы явно не укажете 'overflow' => true, в определении массива часов открытия. Вы также можете явно объединить их.
$ ranges = [
' monday ' => [ ' 08:00-11:00 ' , ' 10:00-12:00 ' ],
];
$ mergedRanges = OpeningHours:: mergeOverlappingRanges ( $ ranges ); // Monday becomes ['08:00-12:00']
OpeningHours:: create ( $ mergedRanges );
// Or use the following shortcut to create from ranges that possibly overlap:
OpeningHours:: createAndMergeOverlappingRanges ( $ ranges );Не все дни являются обязательными, если день пропущен, он будет отмечен как закрытый.
OpeningHours::fill(array $data): SpatieOpeningHoursOpeningHours То же, что create , но нестатическое.
$ openingHours = ( new OpeningHours )-> fill ([
' monday ' => [ ' 09:00-12:00 ' , ' 13:00-18:00 ' ],
// ...
]);OpeningHours::forWeek(): SpatieOpeningHoursOpeningHoursForDay[] Возвращает массив объектов OpeningHoursForDay для обычной недели.
$ openingHours -> forWeek ();OpeningHours::forWeekCombined(): array Возвращает массив дней. Ключ массива — это первый день с одинаковыми часами, значения массива — это дни с одинаковыми рабочими часами и объект OpeningHoursForDay .
$ openingHours -> forWeekCombined ();OpeningHours::forWeekConsecutiveDays(): array Возвращает массив объединенных дней, смежных дней с одинаковыми часами. Ключ массива — это первый день с одинаковыми часами, значения массива — это дни с одинаковыми рабочими часами и объект OpeningHoursForDay .
Внимание : последовательные дни считаются с понедельника по воскресенье без зацикливания (понедельник не следует за воскресеньем) независимо от порядка дней в исходных данных.
$ openingHours -> forWeekConsecutiveDays ();OpeningHours::forDay(string $day): SpatieOpeningHoursOpeningHoursForDay Возвращает объект OpeningHoursForDay для обычного дня. День — это строчная строка названия дня на английском языке.
$ openingHours -> forDay ( ' monday ' );OpeningHours::forDate(DateTimeInterface $dateTime): SpatieOpeningHoursOpeningHoursForDay Возвращает объект OpeningHoursForDay для определенной даты. Он ищет исключение в этот день, а в противном случае возвращает часы работы в соответствии с обычным расписанием.
$ openingHours -> forDate ( new DateTime ( ' 2016-12-25 ' ));OpeningHours::exceptions(): SpatieOpeningHoursOpeningHoursForDay[] Возвращает массив всех объектов OpeningHoursForDay для исключений, связанных строкой даты Ymd .
$ openingHours -> exceptions ();OpeningHours::isOpenOn(string $day): boolПроверяет, открыто ли предприятие (содержит хотя бы 1 диапазон часов работы) в день обычного расписания.
$ openingHours -> isOpenOn ( ' saturday ' );Если данная строка является датой, она проверит, открыта ли она (содержит хотя бы 1 диапазон часов работы), учитывая как обычный дневной график, так и возможные исключения.
$ openingHours -> isOpenOn ( ' 2020-09-03 ' );
$ openingHours -> isOpenOn ( ' 09-03 ' ); // If year is omitted, current year is used instead OpeningHours::isClosedOn(string $day): boolПроверяет, закрыто ли предприятие в какой-либо день в обычном расписании.
$ openingHours -> isClosedOn ( ' sunday ' );OpeningHours::isOpenAt(DateTimeInterface $dateTime): boolПроверяет, открыто ли предприятие в определенный день и в определенное время.
$ openingHours -> isOpenAt ( new DateTime ( ' 2016-26-09 20:00 ' ));OpeningHours::isClosedAt(DateTimeInterface $dateTime): boolПроверяет, закрыто ли предприятие в определенный день и в определенное время.
$ openingHours -> isClosedAt ( new DateTime ( ' 2016-26-09 20:00 ' ));OpeningHours::isOpen(): boolПроверяет, открыт ли бизнес прямо сейчас.
$ openingHours -> isOpen ();OpeningHours::isClosed(): boolПроверяет, закрыто ли предприятие прямо сейчас.
$ openingHours -> isClosed ();OpeningHours::isAlwaysOpen(): boolПроверяет, работает ли бизнес 24/7, не имеет исключений и фильтров.
if ( $ openingHours -> isAlwaysOpen ()) {
echo ' This business is open all day long every day. ' ;
}OpeningHours::isAlwaysClosed(): boolПроверяет, не открыт ли бизнес, нет ли исключений и фильтров.
OpeningHours принимает пустой массив или список, в котором каждый день недели пуст, без каких-либо предубеждений.
Если это недопустимое состояние в вашем домене, вам следует использовать этот метод, чтобы создать исключение или показать ошибку.
if ( $ openingHours -> isAlwaysClosed ()) {
throw new RuntimeException ( ' Opening hours missing ' );
}OpeningHours::nextOpenOpeningHours::nextOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` Возвращает DateTime следующего открытия из заданного DateTime ( $dateTime или с этого момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable , возвращается объект DateTimeImmutable .
Установите в $searchUntil дату, чтобы генерировать исключение, если до этого момента не удалось найти время открытия.
Установите в $cap дату, чтобы, если до этого момента не удалось найти время открытия, возвращалась $cap .
$ openingHours -> nextOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::nextCloseOpeningHours::nextClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` Возвращает DateTime следующего закрытия из заданного DateTime ( $dateTime или с этого момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable , возвращается объект DateTimeImmutable .
Установите в $searchUntil дату, чтобы генерировать исключение, если до этого момента не удалось найти время закрытия.
Установите в $cap дату, чтобы, если до этого момента не удалось найти время закрытия, возвращалась $cap .
Если расписание всегда открыто или всегда закрыто, изменение состояния не происходит, и поэтому nextOpen (а также previousOpen , nextClose и previousClose ) выдаст MaximumLimitExceeded Вы можете перехватить его и отреагировать соответствующим образом, или вы можете использовать методы isAlwaysOpen / isAlwaysClosed для прогнозирования. такой случай.
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::previousOpenOpeningHours::previousOpen(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` Возвращает предыдущее открытое DateTime из заданного DateTime ( $dateTime или с настоящего момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable , возвращается объект DateTimeImmutable .
Установите в $searchUntil дату, чтобы генерировать исключение, если после этого момента не удается найти время открытия.
Установите в $cap дату, чтобы, если после этого момента не удастся найти время открытия, возвращалась $cap .
$ openingHours -> previousOpen ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::previousCloseOpeningHours::previousClose(
?DateTimeInterface $ dateTime = null ,
?DateTimeInterface $ searchUntil = null ,
?DateTimeInterface $ cap = null ,
) : DateTimeInterface` Возвращает DateTime предыдущего закрытия из заданного DateTime ( $dateTime или с настоящего момента, если этот параметр имеет значение NULL или опущен).
Если передается объект DateTimeImmutable , возвращается объект DateTimeImmutable .
Установите в $searchUntil дату, чтобы генерировать исключение, если после этого момента не удалось найти время закрытия.
Установите в $cap дату, чтобы, если после этого момента не удалось найти время закрытия, возвращалась $cap .
$ openingHours -> nextClose ( new DateTime ( ' 2016-12-24 11:00:00 ' ));OpeningHours::diffInOpenHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество открытого времени (количество часов в виде плавающего числа) между двумя датами/временами.
$ openingHours -> diffInOpenHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));OpeningHours::diffInOpenMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество открытого времени (количество минут в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInOpenSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество времени открытия (количество секунд в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInClosedHours(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество закрытого времени (количество часов в виде плавающего числа) между двумя датами/временами.
$ openingHours -> diffInClosedHours ( new DateTime ( ' 2016-12-24 11:00:00 ' ), new DateTime ( ' 2016-12-24 16:34:25 ' ));OpeningHours::diffInClosedMinutes(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество времени закрытия (количество минут в виде плавающего числа) между двумя датами/временами.
OpeningHours::diffInClosedSeconds(DateTimeInterface $startDate, DateTimeInterface $endDate) : floatВозвращает количество времени закрытия (количество секунд в виде плавающего числа) между двумя датами/временами.
OpeningHours::currentOpenRange(DateTimeInterface $dateTime) : false | TimeRange Возвращает экземпляр SpatieOpeningHoursTimeRange текущего открытого диапазона, если предприятие открыто, и false, если предприятие закрыто.
$ range = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ range ) {
echo " It's open since " . $ range -> start (). "n" ;
echo " It will close at " . $ range -> end (). "n" ;
} else {
echo " It's closed " ;
} Методы start() и end() возвращают экземпляры SpatieOpeningHoursTime . Экземпляры Time , созданные на основе даты, могут быть отформатированы с использованием информации о дате. Это полезно для диапазонов, выходящих за полночь:
$ period = $ openingHours -> currentOpenRange ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ period ) {
echo " It's open since " . $ period -> start ()-> format ( ' D Gh ' ). "n" ;
echo " It will close at " . $ period -> end ()-> format ( ' D Gh ' ). "n" ;
} else {
echo " It's closed " ;
}OpeningHours::currentOpenRangeStart(DateTimeInterface $dateTime) : false | DateTime Возвращает экземпляр DateTime даты и времени с момента открытия предприятия, если предприятие открыто, и false, если предприятие закрыто.
Примечание. Если вы используете ночные диапазоны, датой может быть предыдущий день.
$ date = $ openingHours -> currentOpenRangeStart ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It's open since " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}OpeningHours::currentOpenRangeEnd(DateTimeInterface $dateTime) : false | DateTime Возвращает экземпляр DateTime даты и времени до тех пор, пока предприятие не будет открыто, если предприятие открыто, и false, если предприятие закрыто.
Примечание: дата может быть на следующий день, если вы используете ночные диапазоны.
$ date = $ openingHours -> currentOpenRangeEnd ( new DateTime ( ' 2016-12-24 11:00:00 ' ));
if ( $ date ) {
echo " It will close at " . $ date -> format ( ' H:i ' );
} else {
echo " It's closed " ;
}OpeningHours::createFromStructuredData(array|string $data, $timezone = null, $outputTimezone = null): SpatieOpeningHoursOpeningHoursСтатический фабричный метод для заполнения набора массивом https://schema.org/OpeningHoursSpecification или строкой JSON.
dayOfWeek поддерживает массив названий дней (в версии Google) или массив URL-адресов дней (официальная спецификация Schema.org).
$ openingHours = OpeningHours:: createFromStructuredData ( ' [
{
"@type": "OpeningHoursSpecification",
"opens": "08:00",
"closes": "12:00",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "14:00",
"closes": "18:00",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
]
},
{
"@type": "OpeningHoursSpecification",
"opens": "00:00",
"closes": "00:00",
"validFrom": "2023-12-25",
"validThrough": "2023-12-25"
}
] ' );OpeningHours::asStructuredData(strinf $format = 'H:i', string|DateTimeZone $timezone) : arrayВозвращает OpeningHoursSpecification в виде массива.
$ openingHours -> asStructuredData ();
$ openingHours -> asStructuredData ( ' H:i:s ' ); // Customize time format, could be 'h:i a', 'G:i', etc.
$ openingHours -> asStructuredData ( ' H:iP ' , ' -05:00 ' ); // Add a timezone
// Timezone can be numeric or string like "America/Toronto" or a DateTimeZone instance
// But be careful, the time is arbitrary applied on 1970-01-01, so it does not handle daylight
// saving time, meaning Europe/Paris is always +01:00 even in summer time.SpatieOpeningHoursOpeningHoursForDay Этот класс предназначен только для чтения. Он реализует ArrayAccess , Countable и IteratorAggregate поэтому вы можете обрабатывать список TimeRange аналогично массиву.
SpatieOpeningHoursTimeRange Объект значения, описывающий период с временем начала и окончания. Может быть преобразовано в строку в формате H:iH:i .
SpatieOpeningHoursTime Объект значения, описывающий одно время. Может быть преобразовано в строку в формате H:i .
Вы можете преобразовать формат OpenStreetMap в объект OpeningHours , используя osm-opening-hours (спасибо mgrundkoetter)
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
composer test Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Если вы обнаружили ошибку, связанную с безопасностью, отправьте электронное письмо по адресу [email protected] вместо использования системы отслеживания проблем.
Вы можете свободно использовать этот пакет, но если он попадет в вашу производственную среду, мы будем очень признательны, если вы отправите нам открытку из вашего родного города с указанием того, какой из наших пакетов вы используете.
Наш адрес: Spatie, Kruikstraat 22, 2018, Антверпен, Бельгия.
Все полученные открытки мы публикуем на сайте нашей компании.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.