cmixin/season

处理工作日和营业时间的碳混入

1.0.0 2023-07-29 16:10 UTC

This package is auto-updated.

Last update: 2024-08-29 18:34:22 UTC


README

Latest Stable Version GitHub Actions Code Climate Test Coverage StyleCI

DateTime修饰符,如startOfSeasonisInSummer

  • Season可以用作一个服务,可以与任何DateTimeDateTimeImmutable对象或日期字符串(包括任何子类,如CarbonChronos)一起工作。
  • 或者,它可以作为一个混入来直接在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();

您可以在CarbonImmutableCarbon或它们的任何子类上使用混入。

配置

在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

感谢