chrisharrison / date-validator
历史日期验证器。
0.0.0
2019-09-06 21:28 UTC
Requires
- php: ^7.2
- chrisharrison/clock: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.2
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函数的有趣特性。只是有点有趣的小知识 😄