日期验证 Codeigniter

我正在为我的控制器中的帖子创建验证。


我对日期有疑问。


我在应用程序/库中创建了一个 MY_Form_validation.php 页面,我在其中写道:


public function valid_date($date, $format = 'Y-m-d') {

    $d = DateTime::createFromFormat($date, $format);

    return $d && $d->format($format) === $date;

}

然后我创建了 form_validation_lang.php


<?php


$lang['form_validation_valid_date'] = 'The field {field} is not a valid date';

在我的控制器中,我有:


//load the libraries


$this->form_validation->set_rules('birthdate', irthdate', 'trim|required|valid_date');


 if($this->form_validation->run() == FALSE){

            $errors = $this->form_validation->error_array();

            var_dump($errors);

            $this->response($errors, 500); 

            return;

        }



  $person = array(

//..

'birthdate' => $this->post('birthdate'),

//...

);

它打印给我:

'生日'=> '字符串'

关于我的数据库,一开始我的领域是数据,我收到了这个错误。比我更改为 Datetime 但错误是一样的。

现在是:

birthdate日期不为空,

例如,现在我试图发布一个像“1960-04-20”这样的日期,但我收到了错误消息:

"birthdate": "字段 birthdate 不是有效日期"

我只想在数据库中写入日期而不是时间,这可能是问题所在吗??我该怎么做才能验证日期?



侃侃无极
浏览 103回答 1
1回答

慕丝7291255

用下一个替换你的函数:public function valid_date($date, $format = 'Y-m-d') {&nbsp;&nbsp; &nbsp; $d = new DateTime($date);&nbsp;&nbsp; &nbsp; return $d && $d->format($format) === $date;}演示或者与下一个:public function valid_date($date, $format = 'Y-m-d') {&nbsp;&nbsp; &nbsp; $d = DateTime::createFromFormat($format,$date);&nbsp; &nbsp;// <-- replace arguments&nbsp; &nbsp; return $d && $d->format($format) === $date;}演示DateTime::createFromFormat() 文档您需要在成功验证后将此字符串转换为 DATE 数据类型,然后才将其发送到数据库中。或者你可以写"to_date($stringvar,$format)"在你的 SQL 查询中。似乎 CodeIgniter 不喜欢验证选项中的默认变量。我的意思是,你不能声明$format = 'Y-m-d'为参数。所以,如果你不使用它,它会起作用:public function valid_date_dmY($str){&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $d = DateTime::createFromFormat('d.m.Y',$str);&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return $d && $d->format('d.m.Y') === $str;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP