Class yii\validators\DateValidator
DateValidator 校验这个属性是否是一个 $format 要求的格式的日期,时间戳,或者日期时间。
在指定 $locale 属性值后,它同样支持转换国际化时间。
类似 12 мая 2014
这种,当 $format 配置为 ICU 格式的时间字符串模式。
你还可以使用 $min 和 $max 属性将日期范围限定在一个特定的区间。
在校验时间之外,这个校验器同样可以把日期输出为一个机器可读的时间戳格式, 你可以通过 $timestampAttribute 属性来配置输出的属性名。 对于哪些包含时间信息(不只是日期)的值,时区信息也会被自动调整。 输入的时区信息默认通过 $timeZone 属性指定, 输出的时区如果 $timestampAttributeFormat 为 null ,则默认是 UTC ,否则是 $timestampAttributeTimeZone。 如果你想避免时区转换,确保 $timeZone 和 $timestampAttributeTimeZone 的值是一样的。
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$attributeNames | array | 属性名称列表. | yii\validators\Validator |
$attributes | array|string | 将要被这个校验器校验的属性名,或者列表。如果多属性,请通过一个数组设置它们。 对于单属性,你可以使用一个字符串,也可以使用一个数组指定。 | yii\validators\Validator |
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component | yii\base\Component |
$builtInValidators | array | List of built-in validators (name => class or configuration) | yii\validators\Validator |
$enableClientValidation | boolean | 是否启用这个校验器的客户端校验。 实际的校验过程是通过 clientValidateAttribute() 返回的 JS 代码来执行。 如果这个方法返回 null, 即使这个属性值为 true ,也不会执行任何客户端校验。 | yii\validators\Validator |
$except | array|string | 校验器不应该应用的情景。 对于多情景,请以一个数组的形式指定它们。对于单情景,你可以使用一个字符串或者一个数组。 | yii\validators\Validator |
$format | string | 要被校验的值应该符合的时间日期格式。 它可以是一个 [ICU manual](http://userguide. | yii\validators\DateValidator |
$isEmpty | callable | 用于替换默认的 isEmpty() 空值校验方法,
如果没有设置,将会使用 isEmpty() 做空值校验。
这个函数的声明应该为 function ($value) ,
它的返回值为一个代表这个值是否为空的布尔值。 |
yii\validators\Validator |
$locale | string | 本地化时间日期转化的 locale ID 这个只有在 [PHP intl extension](http://php. | yii\validators\DateValidator |
$max | integer|string | 时间日期的上限,默认为 null ,代表无上限。 这个可以是一个 unix 时间戳,也可以是一个代表日期时间格式的字符串值。 如果这个属性是字符串, 将使用 $format 来格式化它。 | yii\validators\DateValidator |
$maxString | string | 用户友好的最大值,用于展示在错误消息中。 如果这个属性是 null, 将会使用未转换的 $max。 | yii\validators\DateValidator |
$message | string | 用户定义的错误消息。
它可以使用如下的占位符,并将会相应地被校验器替换:
- {attribute} : 被校验的属性标签
- {value} : 被校验的属性值
注意:有一些校验器会引入其他的属性用于指定的校验条件未满足时的错误消息。
关于这些属性的具体详情,请参考具体的类 API 文档。
通常,
这些属性代表最重要的校验规则未满足时的所触发的主要错误消息。 |
yii\validators\Validator |
$min | integer|string | 时间日期的下限,默认是 null,代表无下限。 这个可以是一个 unix 时间戳,也可以是一个代表日期时间格式的字符串值。 如果这个属性是字符串, 将使用 $format 来格式化它。 | yii\validators\DateValidator |
$minString | string | 用户友好的最小值,用于展示在错误消息中。 如果这个属性是 null, 将会使用未转换的 $min。 | yii\validators\DateValidator |
$on | array|string | 校验器被应用的情景。 对于多情景,请以一个数组的形式指定它们。对于单情景,你可以使用一个字符串或者一个数组。 | yii\validators\Validator |
$skipOnEmpty | boolean | 当被校验的属性值为 null 或者空字符串时, 是否该跳过这个校验规则。 | yii\validators\Validator |
$skipOnError | boolean | 当被校验的属性根据之前的校验规则已经有一些校验错误时,这个校验规则是否应该被跳过。 默认为 true。 | yii\validators\Validator |
$timeZone | string | 转化日期和时间值的时区。 这个可以是任意可以传递给函数 [date_default_timezone_set()](http://www. | yii\validators\DateValidator |
$timestampAttribute | string | 用于接受转换结果的属性名称。
当这个属性不为空,且校验成功的情况下,
指定的属性将会被赋值为转换结果。
这个可以同时为被校验的属性名。
在这种情况下,原始值在成功校验后,会被重写为时间戳值。
注意,当使用这个属性时,输入值将会被转换为一个 unix 时间戳,
默认是 UTC 时区,所以会有一个 input time zone 到 UTC 的时区转换。
当定义了 $timestampAttributeFormat ,
你可以通过设置 $timestampAttributeTimeZone 为其他不同于 'UTC' 的值来控制这个转换。 |
yii\validators\DateValidator |
$timestampAttributeFormat | string | 填充 $timestampAttribute 的格式。 这个格式可以同 $format 一样。 如果未设置,$timestampAttribute 将会接受一个 UNIX 时间戳。 如果 $timestampAttribute 未设置,这个属性将会被忽略。 | yii\validators\DateValidator |
$timestampAttributeTimeZone | string | 当填充 $timestampAttribute 属性时,使用的时区,默认为 UTC 。
这个可以是任意可以传递给函数 [date_default_timezone_set()](http://www. |
yii\validators\DateValidator |
$tooBig | string | 用户自定义错误消息当值大于 $max. | yii\validators\DateValidator |
$tooSmall | string | 用户自定义错误消息当值小于 $min. | yii\validators\DateValidator |
$type | string | 校验器的类型,意味着被校验的是一个日期,时间戳,或者时间日期值。
这个属性影响着 $format 的默认值,
当 $format 是 short , medium , long , 或者 full 之一的intl短格式时,它会设置校验器的正确行为。
这个属性只有扩展 [PHP intl extension](http://php. |
yii\validators\DateValidator |
$validationAttributes | yii\validators\Validator | ||
$when | callable | 一个PHP函数调用,它的返回值将会决定这个校验器是否被应用。
这个函数的声明应该为 function ($model, $attribute) ,其中 $model 和 $attribute 代表被校验的模型和属性。
这个函数应该返回一个布尔值。
这个属性主要用于支持服务端条件校验。
如果这个属性没有被设置,这个校验器将会总是在服务端执行校验。
以下是一个示例,只有当前选择的国家为 USA 时,才会在服务端执行此校验器:
` php
function ($model) {
return $model->country == Country::USA;
}
` |
yii\validators\Validator |
$whenClient | string | 这是一个 JS 函数,它的返回值将会决定校验器是否在客户端执行。
这个函数的声明应该为 function (attribute, value) ,
其中 attribute 代表被要被校验的属性对象(参考: clientValidateAttribute()),
value 是属性当前值。
这个属性主要用于支持客户端条件校验。
如果这个属性没有被设置,这个校验器将会总是在客户端执行校验。
以下是一个示例,只有当前选择的国家为 USA 时,才会在客户端执行此校验器:
` javascript
function (attribute, value) {
return $('#country'). |
yii\validators\Validator |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\Component |
__clone() | This method is called after the object is created by cloning an existing one. | yii\base\Component |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of a component property. | yii\base\Component |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\Component |
__set() | Sets the value of a component property. | yii\base\Component |
__unset() | Sets a component property to be null. | yii\base\Component |
addError() | 添加指定属性的错误到模型对象中。 这是一个帮助方法用于执行消息的选择和国际化。 | yii\validators\Validator |
attachBehavior() | Attaches a behavior to this component. | yii\base\Component |
attachBehaviors() | Attaches a list of behaviors to the component. | yii\base\Component |
behaviors() | Returns a list of behaviors that this component should behave as. | yii\base\Component |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\Component |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\Component |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
clientValidateAttribute() | 返回可用于客户端校验的 JS 代码。 | yii\validators\Validator |
createValidator() | 创建校验器对象。 | yii\validators\Validator |
detachBehavior() | Detaches a behavior from the component. | yii\base\Component |
detachBehaviors() | Detaches all behaviors from the component. | yii\base\Component |
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. | yii\base\Component |
getAttributeNames() | 返回去除开头 ! 的属性名称。 |
yii\validators\Validator |
getBehavior() | Returns the named behavior object. | yii\base\Component |
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component |
getClientOptions() | 返回客户端校验参数。 这个方法通常在 clientValidateAttribute() 中调用。 你可以改写这个方法用于修改传给客户端校验的参数。 | yii\validators\Validator |
getValidationAttributes() | yii\validators\Validator | |
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. | yii\base\Component |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\Component |
hasProperty() | Returns a value indicating whether a property is defined for this component. | yii\base\Component |
init() | Initializes the object. | yii\validators\DateValidator |
isActive() | 返回一个值代表当前校验器在当前情景和属性下是否是激活状态。 | yii\validators\Validator |
isEmpty() | 检测指定的值是否为空。 如果它是一个 null,一个空的数组,或者一个空字符串,那么它会被认为是一个空值。 注意这个方法和 PHP 的 empty() 函数不同,当值为 0 时,它会返还 false 。(非空值) | yii\validators\Validator |
off() | Detaches an existing event handler from this component. | yii\base\Component |
on() | Attaches an event handler to an event. | yii\base\Component |
trigger() | Triggers an event. | yii\base\Component |
validate() | 校验一个指定的值。 你可以使用这个方法在数据模型上下文之外的地方校验一个值。 | yii\validators\Validator |
validateAttribute() | 校验单个属性。 子类必须实现这个方法以实现具体的校验逻辑。 | yii\validators\DateValidator |
validateAttributes() | 校验指定的对象。 | yii\validators\Validator |
受保护的方法
方法 | 描述 | 被定义在 |
---|---|---|
formatMessage() | 使用 I18N 格式化消息,或者只是简单的 strtr ,如果 \Yii::$app 不可用的话。 |
yii\validators\Validator |
parseDateValue() | 将日期字符串转换为 UNIX 时间戳。 | yii\validators\DateValidator |
validateValue() | 校验一个值。 一个校验类可以实现这个方法,以支持在数据模型上下文之外的地方支持数据校验。 | yii\validators\DateValidator |
常量
常量 | 值 | 描述 | 被定义在 |
---|---|---|---|
TYPE_DATE | 'date' | 常量,用于设置属性校验 $type 为日期值,以intl短格式校验 | yii\validators\DateValidator |
TYPE_DATETIME | 'datetime' | 常量,用于设置属性校验 $type 为时间日期值,以intl短格式校验 | yii\validators\DateValidator |
TYPE_TIME | 'time' | 常量,用于设置属性校验 $type 为时间戳值,以intl短格式校验 | yii\validators\DateValidator |
属性详情
要被校验的值应该符合的时间日期格式。 它可以是一个 ICU manual 文档中描述的时间日期格式。
另外,这个属性可以是一个前缀为php:
的字符串,代表一个可以被PHP Datetime 类识别的时间日期格式。
更多支持的格式,请参考 http://php.net/manual/en/datetime.createfromformat.php
如果这个属性没有设置,默认值为 Yii::$app->formatter->dateFormat
,更多详情,参考 yii\i18n\Formatter::$dateFormat。
自 2.0.8 起,默认值将由不同的格式化类所决定,
依赖 $type 的具体值:
- 如果是 TYPE_DATE, 默认值为 yii\i18n\Formatter::$dateFormat,
- 如果是 TYPE_DATETIME, 默认值为 yii\i18n\Formatter::$datetimeFormat,
- 如果是 TYPE_TIME, 默认为 yii\i18n\Formatter::$timeFormat.
以下是这个属性的示例值:
'MM/dd/yyyy' // date in ICU format
'php:m/d/Y' // the same date in PHP format
'MM/dd/yyyy HH:mm' // not only dates but also times can be validated
注意: 底层所使用的日期转换函数依赖具体的格式,如果你用 ICU 格式,
然后 PHP intl extension 扩展正确安装,
将使用 IntlDateFormatter 转换输入值。其他的情况,使用 PHP DateTime来转换。
IntlDateFormatter 的优势在于它可以转换国际化的世界格式,类似 12. Mai 2015
或者 12 мая 2014
。
而 PHP 内置转换函数只能转换英语格式。PHP内置转换函数对输入更严格一些,
如果是格式 php:d.m.Y
,那么值 12.05.05
将不会被PHP内置函数接受 ,但是 IntlDateFormatter 却可以以格式 dd.MM.yyyy
接受这个值。
如果你需要使用 IntlDateFormatter 你可以通过指定 minimum date 来避免这个问题。
本地化时间日期转化的 locale ID 这个只有在 PHP intl extension 安装的情况下才生效。 如果未设置,将使用 formatter, 参见 yii\i18n\Formatter::$locale
时间日期的上限,默认为 null ,代表无上限。 这个可以是一个 unix 时间戳,也可以是一个代表日期时间格式的字符串值。 如果这个属性是字符串, 将使用 $format 来格式化它。
参见 $tooBig 当日期太大时,参考 tooBig 自定义错误消息。.
用户友好的最大值,用于展示在错误消息中。 如果这个属性是 null, 将会使用未转换的 $max。
时间日期的下限,默认是 null,代表无下限。 这个可以是一个 unix 时间戳,也可以是一个代表日期时间格式的字符串值。 如果这个属性是字符串, 将使用 $format 来格式化它。
参见 $tooSmall 当日期太小时,参考 tooSmall 自定义错误消息。.
用户友好的最小值,用于展示在错误消息中。 如果这个属性是 null, 将会使用未转换的 $min。
转化日期和时间值的时区。
这个可以是任意可以传递给函数 date_default_timezone_set() 调用的参数值。
例如: UTC
, Europe/Berlin
或者 America/Chicago
。
可用的时区值参考 php manual。
如果这个属性没有设置,将使用 yii\base\Application::$timeZone。
用于接受转换结果的属性名称。 当这个属性不为空,且校验成功的情况下, 指定的属性将会被赋值为转换结果。
这个可以同时为被校验的属性名。 在这种情况下,原始值在成功校验后,会被重写为时间戳值。
注意,当使用这个属性时,输入值将会被转换为一个 unix 时间戳,
默认是 UTC 时区,所以会有一个 input time zone 到 UTC 的时区转换。
当定义了 $timestampAttributeFormat ,
你可以通过设置 $timestampAttributeTimeZone 为其他不同于 'UTC'
的值来控制这个转换。
参见:
填充 $timestampAttribute 的格式。 这个格式可以同 $format 一样。
如果未设置,$timestampAttribute 将会接受一个 UNIX 时间戳。 如果 $timestampAttribute 未设置,这个属性将会被忽略。
参见:
当填充 $timestampAttribute 属性时,使用的时区,默认为 UTC
。
这个可以是任意可以传递给函数 date_default_timezone_set() 调用的参数值。
例如: UTC
, Europe/Berlin
或者 America/Chicago
。
可用的时区值参考 php manual。
如果属性 $timestampAttributeFormat 未设置,这个属性也会被忽略。
用户自定义错误消息当值大于 $max.
用户自定义错误消息当值小于 $min.
校验器的类型,意味着被校验的是一个日期,时间戳,或者时间日期值。
这个属性影响着 $format 的默认值,
当 $format 是 short
, medium
, long
, 或者 full
之一的intl短格式时,它会设置校验器的正确行为。
这个属性只有扩展 PHP intl extension 安装时才生效。
这个属性可以设置为如下值:
- TYPE_DATE - (默认)只接受日期值,这意味着不包括时间部分的日期值才有效。
- TYPE_DATETIME - 接受时间日期值,即同时包含时间部分和日期部分。
- TYPE_TIME - 接受时间戳值,即不包含日期信息。
方法详情
Initializes the object.
This method is invoked at the end of the constructor after the object is initialized with the given configuration.
public void init() |
将日期字符串转换为 UNIX 时间戳。
protected integer|false parseDateValue($value) | ||
$value | string | 日期字符串。 |
return | integer|false | 一个合法的 UNIX 时间戳,如果转换失败,返回 |
---|
校验单个属性。 子类必须实现这个方法以实现具体的校验逻辑。
public void validateAttribute($model, $attribute) | ||
$model | yii\base\Model | 被校验的数据模型对象。 |
$attribute | string | 被校验的属性名称。 |
校验一个值。 一个校验类可以实现这个方法,以支持在数据模型上下文之外的地方支持数据校验。
protected array|null validateValue($value) | ||
$value | mixed | 被校验的数据值。 |
return | array|null | 错误消息,和可用于替换错误消息中占位符的参数。
对于这个例子 如果数据是合法的,返回 null。 |
---|---|---|
throws | yii\base\NotSupportedException | 如果校验器不支持模型外数据校验。 |