reinbier / laravel-holiday

Laravel中的正确假日处理方法。

v2.2.0 2024-04-09 13:09 UTC

This package is auto-updated.

Last update: 2024-09-09 14:14:30 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包通过在项目中提供包含特定年份所有假日的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)。有关更多信息,请参阅许可文件