ujamii / osm-opening-hours
Openstreetmap 开放时间格式的解析器
Requires
- php: >=8.0
- ext-calendar: *
- spatie/opening-hours: ^2.11
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- infection/infection: ^0.26.8
- phpstan/phpstan: ^1.6
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-08-30 13:41:10 UTC
README
作为 Openstreetmap 开放时间格式 的连接器,用于解析库 spatie/opening-hours
。
安装
composer require ujamii/osm-opening-hours
使用
$hours = OsmStringToOpeningHoursConverter::openingHoursFromOsmString('Mo-Sa 10:00-18:00'); $hours->isOpenAt(new \DateTimeImmutable('2022-01-10 16:00:00')); // true, this is a monday $hours->isOpenAt(new \DateTimeImmutable('2022-03-06 16:00:00')); // false, as this is a sunday
在 $hours
对象上还有很多其他方法,请查看该库的 文档。当然,您也可以使用一些更复杂的输入(请也查看 文档)和以下缺少功能的列表,以查看实际可以实现的内容
Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00
Sa 08:00-12:00; Mo 11:30-17:00; Tu 11:30-18:00; Dec 23-31 off; Jan 24 off; Oct 10 off; PH off; Apr 16 off
如果您还需要支持公共假日功能(如上面示例中的 PH off
),您必须传递一个如下的过滤器
$hours = OsmStringToOpeningHoursConverter::openingHoursFromOsmString('Mo-Su 10:00-18:00; PH 09:00-12:00', ['PH' => new GermanPublicHolidayFilter()]); $hours->isOpenAt(new \DateTimeImmutable('2022-01-10 16:00:00')); // true, open late on normal day $hours->isOpenAt(new \DateTimeImmutable('2022-01-01 16:00:00')); // false, closed late on holiday $hours->isOpenAt(new \DateTimeImmutable('2022-01-01 11:00:00')); // true, open early on holiday
德国假日的过滤器已经 包含,因此如果您想实现针对您的特定功能,请查看此文件和相应的 接口。预期的配置数组可能看起来像 ['PH' => new GermanPublicHolidayFilter()]
,其中键 PH
必须与给定 OSM 字符串中的规则集的开头匹配,而值是您的过滤器类的实例。输入值如 PH 09:00-12:00
或 PH off
将被解析并传递给过滤器在 setOpeningHours
方法中。当请求类似 isOpenAt
的内容时,spatie/opening-hours
库将内部调用 applyFilter(\DateTimeImmutable $date)
方法。
运行测试
您可以使用 composer run phpunit
或 composer run testall
运行测试并进行静态分析。
许可和贡献
由于这是一个开源项目,您可以通过报告错误、改进代码、编写测试或您能做的任何其他事情来贡献。只需分叉并提交 PR。
如果您想帮助我,请从我的 Amazon愿望清单 买些东西。
已知问题/缺少功能
- 由于
spatie/opening-hours
库不支持基于周的周几的不同设置(如week 01-53/2 Fr 09:00-12:00; week 02-52/2 Fr 14:00-18:00
),因此我们必须通过库支持为每个给定开放时间值提供的数据属性来添加此信息(这可能可以通过另一个过滤器来解决) - 约束功能如年份、年范围、年份、月份、月日和周范围尚未或未完全支持。这也可能可以通过过滤器功能来解决
- 如
week 14-24
和week 1,3,7,34
这样的内容尚未支持 - 尚未验证 OSM 输入字符串
- 尚未支持受约束的周几
Th[1,2-3], Fr[-1]
- 尚未支持计算
Sa[-1],Sa[-1] +1 day