nerburish / yii2-daterange-validator
添加一个日期范围验证器,允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用DateRangePicker小部件并按从/至值进行筛选的情况
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-18 20:25:16 UTC
README
http://nerburish.com/yii2-daterange-validator/ en 🇪🇸
日期范围验证器允许验证模型属性是否为有效的日期范围格式。特别适用于您想使用DateRangePicker小部件并按从/至值进行筛选的情况
安装
安装此扩展的首选方式是通过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 DateRangePicker(见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 formatter组件中获取,但我们可以通过参数定义其他格式。由于只传递了日期,因此自动将起始时间设置为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]
];
}