chrisharrison/date-validator

历史日期验证器。

0.0.0 2019-09-06 21:28 UTC

This package is auto-updated.

Last update: 2024-09-08 03:35:20 UTC


README

安装

我已经将此添加到Packagist,因此您可以使用

composer require chrisharrison/date-validator

或者,您可以克隆仓库并运行

composer install

运行测试

使用以下命令运行测试

vendor/bin/phpunit

用法

您可以使用以下方式注入日期验证器

final class SomeOtherFunctionality
{
    private $dateValidator;
    
    public function __construct(DateValidator $dateValidator)
    {
        $this->dateValidator = $dateValidator;
    }
    
    public function doSomethingWithDate(string $date)
    {
        if ($this->dateValidator->validate()->isValid()) {
            return 'A valid historical date';
        }
    }
}

此包附带默认实现。`DefaultDateValidator`需要一个`Clock`来比较日期。应在IoC容器中初始化`DefaultDateValidator`。可以像这样构建

$dateValidator = new DefaultDateValidator(new SystemClock);

`validate()`方法返回一个包含以下方法的`DateValidatorResponse`值对象

  • isValid(): bool 判断日期是否为有效的历史日期。
  • getMessage(): DateValidatorResponseMessage 返回一个枚举,具有以下选项
    • INVALID_DATE 输入日期不是有效的日期(例如32/13/1994)
    • NOT_A_DATE_IN_THE_PAST 输入日期有效,但不在过去(例如01/01/3033)
    • INVALID_FORMAT 输入根本不是日期(例如'jibberish')
    • 如果日期有效,则消息是`DateValidatorResponseMessage`的null版本

此包还提供了一个单例,可以像这样使用

use ChrisHarrison\DateValidator\Singleton\DateValidator;

DateValidator::validateHistoricalDate('03/12/1999');

单例内部使用`DefaultDateValidator`,`validateHistoricalDate()`与上面相同。

我的策略

您可以通过查看我的提交历史来了解我处理这个任务的方式。

关于非常古老日期的说明

我编写的解决方案可以处理公元1年之前的日期。它不处理公元前日期。而且奇怪地认为存在零年。如果我要花更多时间研究这个——并且有商业案例——我会研究这个。[好吧,我忍不住查看了。看起来PHP正在使用某些ISO 8601的实现,而不是格里高利日历]

关于PHP日期格式的说明

输入日期格式应为`DD/MM/YYYY`的规定让我想起了多年前我在Stackoverflow答案中讨论的某些PHP函数的有趣特性。只是有点有趣的小知识 😄