ujamii/osm-opening-hours

Openstreetmap 开放时间格式的解析器

dev-main 2024-08-29 13:08 UTC

README

Packagist Minimum PHP Version Continuous Integration

作为 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:00PH off 将被解析并传递给过滤器在 setOpeningHours 方法中。当请求类似 isOpenAt 的内容时,spatie/opening-hours 库将内部调用 applyFilter(\DateTimeImmutable $date) 方法。

运行测试

您可以使用 composer run phpunitcomposer run testall 运行测试并进行静态分析。

许可和贡献

MIT

由于这是一个开源项目,您可以通过报告错误、改进代码、编写测试或您能做的任何其他事情来贡献。只需分叉并提交 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-24week 1,3,7,34 这样的内容尚未支持
  • 尚未验证 OSM 输入字符串
  • 尚未支持受约束的周几 Th[1,2-3], Fr[-1]
  • 尚未支持计算 Sa[-1],Sa[-1] +1 day