xisodev / working_hours
Schedule 是一个帮助跟踪模型日程的包。如果你公司有工人,你可以为他们设置日程,并通过时间查看他们的可用性。
v1.0.1
2022-12-08 15:50 UTC
Requires
- laravel/framework: 9.*
- spatie/opening-hours: ^2.13
Requires (Dev)
- orchestra/testbench: ~3.5.0|~3.6.0
- phpunit/phpunit: ^6.2|^7.0
This package is auto-updated.
Last update: 2024-09-08 19:36:04 UTC
README
Schedule 是一个帮助跟踪模型日程的包。如果你公司有工人,你可以为他们设置日程,并通过时间查看他们的可用性。
灵感
此包受到了 Spatie's Opening Hours 包的启发,该包使用日程表,但仅是静态的,而不是将其绑定到模型。这让我有了一个想法,那就是将其与 Eloquent 模型比传统类更接近。
安装
使用 Composer CLI 安装此包
$ composer require xisodev/working_hours
对于不支持包发现的 Laravel 版本,你应该将其添加到你的 config/app.php 文件中的 providers 数组中
\XisoDev\WorkingHours\ScheduleServiceProvider::class,
发布迁移文件和配置文件。
$ php artisan vendor:publish --provider="XisoDev\WorkingHours\ScheduleServiceProvider"
迁移数据库。
$ php artisan migrate
将特质添加到你的模型中。
use XisoDev\WorkingHours\Traits\HasSchedule; class User extends Model { use HasSchedule; ... }
入门指南
为了开始,让我们为我们的用户创建一个日程。它将从周一到周五,8-12点和13-18点。
$user->setSchedule([ 'monday' => ['08:00-12:00', '13:00-18:00'], 'tuesday' => ['08:00-12:00', '13:00-18:00'], 'wednesday' => ['08:00-12:00', '13:00-18:00'], 'thursday' => ['08:00-12:00', '13:00-18:00'], 'friday' => ['08:00-12:00', '13:00-18:00'], ]); $user->hasSchedule(); // true
假设用户每年的3月1日过生日,所以让我们将它添加到排除列表中。此外,圣诞节的第一天和第二天对任何人都是免费的,让我们也将2018年5月1日添加到我们的排除列表中。
注意:2018年5月1日只会发生一次,它不是重复发生的。
$user->setExclusions([ '03-01' => ['08:00-12:00'], '12-25' => [], '12-26' => [], '2018-05-01' => [], ]);
检查可用性
你可以检查用户在某个日期或日期是否有工作时间。传递日期也可以与 Carbon 实例一起使用。
$user->isAvailableOn('monday'); // true $user->isAvailableOn('05-28'); // true; This is Monday, in 2018 (current year) $user->isAvailableOn('2018-05-28'); // true $user->isAvailableOn(Carbon::create(2018, 5, 28, 0, 0, 0)); // true $user->isUnavailableOn('monday'); // false $user->isUnavailableOn('05-28'); // false $user->isUnavailableOn('2018-05-28'); // false $user->isUnavailableOn(Carbon::create(2018, 5, 28, 0, 0, 0)); // false
如果那天有排除项,它将根据那天设置的日程返回正确的值。
$user->isUnavailableOn('12-25'); // true $user->isUnavailableOn('03-01'); // false
检查特定时间点的可用性
你还可以检查特定日期的特定时间的可用性。
$user->isAvailableOnAt('monday', '09:00'); // true $user->isUnavailableOnAt('monday', '09:00'); // false
获取一天的小时数或分钟数
你可以获取一天安排的小时数或分钟数。例如,这对于跟踪工作时间很有用。
$user->getHoursOn('03-01'); // 4 $user->getHoursOn('12-26'); // 0 $user->getHoursOn('05-28'); // 9 $user->getHoursOn('2018-05-28'); // 9 $user->getMinutesOn('03-01'); // 240
删除日程
如果你计划删除用户的工作时间表,你可以通过调用 deleteSchedule() 来完成。
$user->deleteSchedule(); $user->hasSchedule(); // false