cmixin / season
处理工作日和营业时间的碳混入
1.0.0
2023-07-29 16:10 UTC
Requires
- php: >=8.2
- psr/container: *
Requires (Dev)
- nesbot/carbon: ^2.68.1
- phpunit/phpunit: ^10.2.3
README
DateTime
修饰符,如startOfSeason
,isInSummer
Season
可以用作一个服务,可以与任何DateTime
或DateTimeImmutable
对象或日期字符串(包括任何子类,如Carbon
或Chronos
)一起工作。- 或者,它可以作为一个混入来直接在
Carbon
对象上调用方法。 - 如果启用了自动发现,混入将在Laravel中自动启用。
如何使用
简单的方法
(new \Season\Season)->isInSummer('2022-06-25') (new \Season\Season)->isInSummer(new DateTimeImmutable('2022-06-25')) (new \Season\Season)->isInSummer(Carbon::now())
方法可以从类\Season\Season
中获得,该类创建成本低,因此每次都可以从新类中调用方法。
作为良好的实践,建议在文件开头使用use Season\Season;
导入类
use Season\Season; (new Season)->isInSummer('2022-06-25'); (new Season)->isInSummer(new DateTimeImmutable('2022-06-25'));
并且保持相同的实例以多次重复使用
use Season\Season; $season = new Season(); $season->isInSummer('2022-06-25'); $season->isInSummer(new DateTimeImmutable('2022-06-25'));
作为服务
您可以使用框架中的依赖注入
use Season\Season; use Psr\Clock\ClockInterface; class ProductController { public function new(Season $season, ClockInterface $clock) { $seasonName = $season->getSeason($clock->now())->getName(); } }
在Laravel中,它将默认提供。
在Symfony中,您必须将\Season\Season
注册为服务,因此需要编辑config/services.yaml如下所示
services: _defaults: # ensure you get the tag 'controller.service_arguments' # if you need services to be available as controller # methods arguments: tags: [ 'controller.service_arguments' ] # then add the class name as a service Season\Season:
更多内容请参考Symfony文档:配置容器中的服务
作为碳方法(混入)
use Carbon\Carbon; use Cmixin\SeasonMixin; // On Laravel, the mixin will be loaded by default. // On other applications/framework, you can enable it with: Carbon::mixin(SeasonMixin::class); Carbon::parse('2022-06-25')->isInSummer();
您可以在CarbonImmutable
,Carbon
或它们的任何子类上使用混入。
配置
在Laravel中禁用混入
如果您使用Laravel但不想为Carbon
全局启用Season
混入,您可以使用以下方法将其从自动发现中删除
"extra": { "laravel": { "dont-discover": [ "cmixin/season" ] } },
自定义天数
默认情况下,Season
使用以下配置创建
[ 3 => 20, // spring 6 => 21, // summer 9 => 22, // fall 12 => 21, // winter ]
将月份(作为键)与每个季节开始时的天数(作为值)进行映射。
但只要键保持不变,您就可以传递一个带有其他天数的自定义配置。
use Season\Season; $season = new Season([ 3 => 21, // spring 6 => 21, // summer 9 => 21, // fall 12 => 21, // winter ]);
在Laravel中,您可以在config/season.php中设置配置,这将适用于混入和服务
<?php return [ 3 => 21, // spring 6 => 21, // summer 9 => 21, // fall 12 => 21, // winter ];
当单独使用Carbon
混入时,您仍然可以调用setSeasonConfig()
来全局更改配置
Carbon::setSeasonConfig([ 3 => 21, // spring 6 => 21, // summer 9 => 21, // fall 12 => 21, // winter ]);
或者在特定调用上应用配置
echo Carbon::now()->getSeason([ 3 => 21, // spring 6 => 21, // summer 9 => 21, // fall 12 => 21, // winter ])->getName();
在Symfony中,您可以通过编辑config/services.yaml来配置服务
services: Season\Season: arguments: $config: 3: 20 6: 12 9: 22 12: 21