stesi / yii2-daterange-validator
添加一个日期范围验证器,允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用日期范围选择器小部件并按起始/结束值过滤时
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-18 04:10:55 UTC
README
允许验证模型属性是否为有效日期范围格式的日期范围验证器。特别适用于您想使用日期范围选择器小部件并按起始/结束值过滤时
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist nerburish/yii2-daterange-validator "dev-master"
或者
"nerburish/yii2-daterange-validator": "dev-master"
将以下内容添加到您的 composer.json 文件的 require 部分。
示例:通过日期范围过滤属性模型
假设我们有一个包含 'created_at' 属性的模型,并且我们想在网格中通过日期范围过滤这个时间戳。在我们的网格中,我们实现了一个字段或小部件,例如 kartik 日期范围选择器(见 http://demos.krajee.com/date-range),它使用日期范围格式填充 'created_at' 输入,例如:12/08/2014 至 17/08/2015
我们需要转到搜索模型,并将规则添加到模型中。然后,我们必须将 $fromDate 和 $untilDate 属性添加到模型中;
use nerburish\daterangevalidator\DateRangeValidator;
public $fromDate;
public $untilDate;
public function rules()
{
return [
[['created_at'], DateRangeValidator::className()]
];
}
如果传递给搜索模型的 created_at 值是有效的格式范围,则 $fromDate 和 $untilDate 将分别分配相应的时间戳。然后,我们可以在查询中添加以下条件
$query->andFilterWhere(['between', 'created_at', $this->fromDate, $this->untilDate]);
如果我们想使用其他属性名而不是默认属性名,我们应该像这样传递属性名
use nerburish\daterangevalidator\DateRangeValidator;
public $myInitialDateName;
public $myUntilDateName;
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'fromDateAttribute' => 'myInitialDateName', 'untilDateAttribute' => 'myUntilDateName']
];
}
默认情况下,预期的是日期格式,并且此格式是从 Yii 格式化组件中获取的,但我们可以通过参数定义其他格式。由于只传递了日期,自动将起始时间设置为 00:00:00,将结束时间设置为 23:59:59。我们还可以更改分隔符字符。例如:12-08-2014 / 17-08-2015
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'format' => 'php:d-m-Y', 'separator' => ' / ']
];
}
然而,如果我们想直接传递日期时间而不是日期格式,那么我们应该像这样配置验证器
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'type' => 'datetime', 'format' => 'php:d/m/Y H:i:s']
];
}
如果我们只想验证范围是否有效,而不将起始和结束时间戳分配给属性模型,我们可以这样配置验证器
public function rules()
{
return [
[['created_at'], DateRangeValidator::className(), 'setAttributes' => false]
];
}