reinbier / laravel-holiday
Laravel中的正确假日处理方法。
Requires
- php: ^8.1
- cmixin/business-day: ^1.16
- illuminate/contracts: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
README
此包通过在项目中提供包含特定年份所有假日的Holiday模型来帮助您。
通过将它们存储在数据库中并通过BusinessDay包自动注入Carbon,您可以通过$carbon->isHoliday()
简单地查看给定的Carbon实例是否表示一个假日。
该模型的好处是可以轻松添加您自己的假日。此外,该包可以为当前区域生成假日。
用例
例如,当您想显示商店的开业时间时。当回显每天的开业时间时,您可以检查给定的日期是否为假日,并说明您将在这一天关闭。
安装
您可以通过composer安装此包
composer require reinbier/laravel-holiday
您应该发布并运行迁移
php artisan vendor:publish --tag="holiday-migrations"
php artisan migrate
可选地,您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="holiday-config"
这是发布配置文件的内容
return [ /** * The name of the table to use. You can adjust this to suit your needs. */ 'table_name' => 'holidays', /** * If you want to use a different locale to generate holidays for, * you can set it here. For now, a sensible default is set. */ 'locale' => config('app.locale', 'nl'), /** * When true, sets the holidays for Carbon in the service container. */ 'enable_carbon' => false, ];
用法
要为当前年和下一年生成本地假日,请执行以下命令。
php artisan holiday:generate
随后,您可以安排该命令每年运行一次,这样当您使用Holiday模型时,表总是包含数据。
为此,请将以下行放入Console/Kernel.php的'schedule'方法中
protected function schedule(Schedule $schedule) { // ... $schedule->command('holiday:generate')->yearly(); }
使用外观
LaravelHoliday
外观会自动注册在服务容器中。外观是单例的,将持有当前年份的Holiday模型。它将在整个应用程序中设置全局假日,这样您就可以检查任何日期是否根据您的模型被视为假日。
外观还提供了一些方法
use Reinbier\LaravelHoliday\Facades\LaravelHoliday; // The Holiday model of the current year $holiday = LaravelHoliday::model(); // All holiday-dates in a Collection $holidays = LaravelHoliday::getHolidays(); // Set the Holiday model and chain methods LaravelHoliday::forYear(2023) ->addHoliday('2023-06-07', 'boss-birthday') ->getHolidays(); // Simply add multiple holidays by chaining LaravelHoliday::forYear(2023) ->addHoliday('2023-06-07', 'boss-birthday') ->addHoliday('2023-10-10', 'anniversary') -> ...
未来的假日
如果您不想仅限于当前年份的假日,您还可以使用外观上的辅助方法获取所有未来的假日:getFutureHolidays()
。
use Reinbier\LaravelHoliday\Facades\LaravelHoliday; $future_holidays = LaravelHoliday::getFutureHolidays(); // You may optionally specify a year, until when to retrieve holidays $future_holidays = LaravelHoliday::getFutureHolidays(2035);
在Carbon中启用假日
该包可以自动将您存储的假日应用于Carbon实例,这样,每当您需要检查日期是否为假日时,您都可以在该Carbon实例上调用->isHoliday()
。
此设置默认禁用。要启用它,请设置config holiday.php
中的值。
'enable_carbon' => true,
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
安全漏洞
如果您发现任何与安全相关的问题,请通过support@reinbier.nl发送电子邮件,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。