Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (Yii)日期时间验证失败_Php_Validation_Yii - Fatal编程技术网

Php (Yii)日期时间验证失败

Php (Yii)日期时间验证失败,php,validation,yii,Php,Validation,Yii,我想验证表单输入,它是文章发布的日期时间 $model = new Post('update'); $model->attributes = $_POST['Post']; if($model->validate()){ //But, validation fails... } 这是我检查输入是否为datetime格式的规则。 我使用此页()作为参考 但我得到了“已创建”输入的验证错误 public fu

我想验证表单输入,它是文章发布的日期时间

$model = new Post('update');
    $model->attributes = $_POST['Post'];

        if($model->validate()){

            //But, validation fails...    

        }
这是我检查输入是否为datetime格式的规则。 我使用此页()作为参考

但我得到了“已创建”输入的验证错误

public function rules()
{
    return array(

        //datetime validation
        array('created', 'date', 'message' => '{attribute}: is not a datetime!', 'format' => 'YYYY-MM-DD HH:MM:SS'),

        );
}
这是我在$models属性中的内容

array(1) { ["created"]=> string(19) "2013-08-01 00:00:01" }
有人知道怎么做吗


提前谢谢大家

这是帖子的创建时间吗?然后,您根本不需要验证它,您应该在beforeSave中设置它,而不是将其与POST一起发送

将此添加到您的模型中:

public function beforeSave()
{
  if($this->isNewRecord)
  {
     $this->created=new CDbExpression('NOW()');
  }
  return parent::beforeSave();
}

我建议在规则中使用输入格式,因为有时您需要自定义格式

array('created', 'date', 'format'=>'yyyy-MM-dd hh:mm:ss', 'message'=>'{attribute} have wrong format'),
有关日期格式的更多信息,请参见这里-

在Yii 2.0.6(可能还有Yii 1.x?)上,正确的格式是:

['creation_date', 'date', 'format'=>'yyyy-MM-dd HH:mm:ss']

如果时间不在上限内,它就不能工作。

>这是帖子的创建时间吗?不完全是。这可能是该帖子计划在未来发布的时间。我编写的规则和你的规则有什么区别?看起来是一样的。数组('created','date','message'=>'{attribute}:不是日期时间!','format'=>'YYYY-MM-DD HH:MM:SS'),日期验证程序使用日期格式调用
CDateTimeParser::parse()
函数。这个函数有严格的格式,如果你不明白大小写的区别,我帮不了你。它的构造类似于
switch($token){case'yyyy':{if($year=self::parseInteger($value,$i,4,4))==false)返回false;$i+=4;break;}
你的
yyyy
会传递它吗,或者在默认情况下会返回false?
date('d')
会返回13和
date('d'))
return
Tue
。因此,请下次思考你在写什么,阅读别人给你的文章。很抱歉迟了给你回复!非常感谢你添加评论。虽然我还没有尝试过,但我想我现在明白如何解决我的问题了。